はじめに
gitですでに管理対象となっているファイル・ディレクトリを無視する方法です。
状況としては.gitignoreファイルを置き忘れや対象ファイルに追加し忘れた場合にcommitしてしまった時などです。
解決策
git rm コマンドを使うことで解決します
ファイルを管理対象から除外する場合
git rm –cached [ファイル名]
※この場合.gitinogreにも追加すること
ディレクトリを管理対象から除外する場合
git rm -r –cached [ディレクトリ名]
※この場合.gitinogreにも追加すること
ファイルを管理対象から除外し且つ作業ディレクトリからも削除する場合
git rm [ファイル名]
ディレクトリを管理対象から除外し且つ作業ディレクトリからも削除する場合
git rm -r [ディレクトリ名]
ファイル・ディレクトリ管理対象からまとめて除外する場合
git ls-filesを使用してgitignoreファイルの除外ファイルをまとめて除外します。
git ls-filesは以下サイトを参照
http://transitive.info/article/git/command/ls-files/
ファイル指定して.gitinogreの除外リストをそのまま管理対象から外します
git rm –cached `git ls-files –full-name -i –exclude-from=.gitignore`
gitが無視リストとする.gitignore、.git/info/excludeにマッチするファイルをまとめて管理対象から外します
git rm –cached `git ls-files –full-name -i –exclude-standard`
はじめに
Rails開発で「不要なDBのクエリー処理」があります。それらを改善するためのEagerLoadingについて対応策についてメモしておきます。
N+1問題について
「N+1」問題は2つのテーブルで関連(association)している場合にありえます。
SQL文が「N+1」回分実行されてしまいパフォーマンスを低下させてしまいます。データ件数が増えれば増えるほど、この問題でパフォーマンスが落ちます。そのためこの問題が起きないように対応する必要があります。
N+1問題の実例
ユーザ情報を保持するusersテーブルと、掲示板投稿データを保持するpostsテーブルで1対Nの関係を持っている場合の例を出します。
usersモデル:
class User < ActiveRecord::Base
has_many :posts
end
postsモデル:
class Post < ActiveRecord::Base
belongs_to :user
end
postsコントローラ:
def index
@posts = Post.all
end
postsビュー(postsの全データを表示):
<% @posts.each do |post| %>
〜 なんらかの処理 〜
<% end %>
※posts.eachでSQL文「select * from posts」が実行されます
postsビュー(postsからusersのデータを取得):
<% @posts.each do |post| %>
<%= post.user.name %>
<% end %>
※post.user.name(nameはDBカラム)でSQL文「select users.* from users where users.id = ? limit 1 ["id", 1]」がpostsの件数分実行されます
件数分実行することがN+1問題となりパフォーマンスに影響を与えてしまっています。
N+1問題をEager Loadingで改善
Eager Loadingとはあらかじめ読み込むデータを取得(1件毎ではなく)しておくことです。
postsコントローラ:
def index
@posts = Post.all.includs(:user)
end
includsメソッドを使い、事前にusersのデータを全て取得しておきます。これによりビューで読み込む時に1件毎に読み込まなくなります。
実際は「SELECT users.* FROM users WHERE users.”id” IN (1, 2, 3, 4, 5)」のように1つのSQLが発行されるのみになります。
includesメソッドやその他EagerLoadingメソッドの参考:
http://qiita.com/k0kubun/items/80c5a5494f53bb88dc58
はじめに
modelのnewとbuildをネットで見ると濫用していて使い道がわからなかったので調べてみました。
new/buildについて
以下、ドキュメントよりbuildはnewのエイリアスと記載されていました。そのため機能的には全く同じようです。
参考:
newについて
http://railsdoc.com/references/new
buildについて
http://railsdoc.com/references/build
暗黙的な使い方の違いについて
どちらも同じということですが、やはり使い分けには暗黙のルール(コーディングルール)があるようです。
例えば、Postsテーブル(投稿用)とComments(投稿に対するコメント)の場合、カーディナリティは1:Nになります。
その場合にPostsにはnew、その子に当たるCommentsにはbuildという具合に関係性を表す場合に使い分けているようです。
modelクラスではPostsはhas_manyで:comments、Commentsはbelong_toで:postsという関係性です。
Posts[1]
Posts.new
Comments[N]
Comments.posts.build
はじめに
railsはデフォルトでエラーメッセージなどの表示文字列は英語になっています。そこでローカライズ対応として日本語化する方法になります。
ローカライズ概要
railsではローカライズするために、config/localesディレクトリの中にyaml言語ファイルを作成(日本語の場合:ja.yml)し、yaml形式(シーケンスとマッピング)で対応する日本語を記述すると自動変換してくれるようになります。
日本語化対応
1.config/applicationファイルの編集
以下のコメントアウトを外し対応言語をjaとします
config.i18n.default_locale = :ja
2.config/locales/ja.ymlファイルを作成する
新規で作成し、手動で設定しても可能ですが、既にrailsのローカライズ対応済みのファイルがgithubで公開されているため、こちらを使用します。
https://github.com/svenfuchs/rails-i18n
日本語化ファイルはjaファイルになります
https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml
ja.ymlファイルを取得
$ curl -o config/locales/ja.yml -L https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml
これで日本語化完了です。ja.ymlの中身をみて、日本語文字列を別途変更したい場合は手動で変更してください。
エラーメッセージのja.ymlは以下のようになっています
errors: format: "%{attribute}%{message}" messages: accepted: を受諾してください。 blank: を入力してください。 present: は入力しないでください。 confirmation: と%{attribute}の入力が一致しません。 empty: を入力してください。 equal_to: は%{count}にしてください。 even: は偶数にしてください。 exclusion: は予約されています。 greater_than: は%{count}より大きい値にしてください。 greater_than_or_equal_to: は%{count}以上の値にしてください。 inclusion: は一覧にありません。 invalid: は不正な値です。 less_than: は%{count}より小さい値にしてください。 less_than_or_equal_to: は%{count}以下の値にしてください。 not_a_number: は数値で入力してください。 not_an_integer: は整数で入力してください。 odd: は奇数にしてください。 record_invalid: バリデーションに失敗しました。 %{errors} restrict_dependent_destroy: "%{record}が存在しているので削除できません。" taken: はすでに存在します。 too_long: は%{count}文字以内で入力してください。 too_short: は%{count}文字以上で入力してください。 wrong_length: は%{count}文字で入力してください。 other_than: は%{count}以外の値にしてください。 template: body: 次の項目を確認してください。 header: one: "%{model}にエラーが発生しました。" other: "%{model}に%{count}個のエラーが発生しました。"
はじめに
Railsで簡易メッセージをViewで表示するために用意されているflashオブジェクトについてメモしておきます。
Controllerからredirect_toメソッドでViewに渡すことが一般的です。
flashオブジェクトとは
ControllerからViewに簡易メッセージ(ログインメッセージ、エラーメッセージ)を送信し表示する場合に使います。
http://railsdoc.com/references/flash
使い方
Controller側(redirect_toメソッド)
redirect_toメソッドはオプションにnotice,alert,flashを用意しています。
notice例:
redirect_to action: 'index', notice: 'ログインに成功しました'
alert例:
redirect_to action: 'index', alert: 'ログインできません'
flash例:
redirect_to action: 'index', flash: {notice: 'ログインに成功しました'}
※flashでキーはオプションのnotice,alertのほか任意の名前でも可能です
http://railsdoc.com/references/redirect_to
View側
notice,alertを表示する例:※bootstrapでメッセージ枠を表示
<% if flash[:notice] %> <div class="alert alert-success"> <%= flash[:notice] %> </div> <% end %> <% if flash[:alert] %> <div class="alert alert-danger"> <%= flash[:alert] %> </div> <% end %>
ifでnotice,alertの中身がある場合に表示とするのがよく使われる
はじめに
Rubyで「!!」を二つ続けて書く演算子がありました。使用所は多くはないとは思いますが便利なので記憶に残しておきます。
「!!」演算子の概要
使い方・使い所
戻り値がnilの場合に、そのままnilではなくfalseを返してもらいたい場合に使えます。
!!true # -> returns true
!!false # -> returns falsea = “string”
!!a # -> returns truea = nil
!!a # -> returns false
参考:
http://codebytes.us/ternary-operator-and-the-double-bang-in-ruby/
使用例
メソッドの内部で戻り値をtrue/falseにしたい場合などが使用例として考えられます
def login?
!!login_user
end
その他のRuby演算子について
Rubyは様々な演算子が用意されています。
個人的には覚えると便利な演算子に「||=」「&=」などあります。
下記サイトでまとまっていましたのでこちら参照下さい
http://docs.ruby-lang.org/ja/2.0.0/doc/symref.html
coffee-break
Don't write code that useless.
1日5杯はコーヒー、カフェオレ飲みます。狭心症のため安静にします☆松本 雄貴
Kotlinでサービスリリース目指す!
iOSでチャットアプリ作成中。自然言語解析LSIを習得中
Mac / Android・iOS / Rails / Oracle
2017年 Lpic L2取得
2012年 Android技術者資格取得
2010年 OracleMasterGold10g取得
2008年 CCNAQiitaもたまに投稿
https://qiita.com/y-matsumoto東京近郊で常駐開発探してる方はこちらよりご連絡ください
SES企業でパートナー会社を探している企業様はこちらよりご連絡ください
スプリットカメラ iOS / Android
音声認識で聞いた日付から曜日当てアプリ Android
ソーシャルタイマー Android
カテゴリー
- ActiveRecord (2)
- Android (52)
- AndroidStudio (10)
- Ansible (1)
- AWS (1)
- Bash (18)
- Blog (7)
- BootStrap (1)
- CentOS (16)
- Chef (1)
- css (2)
- Eclipse (5)
- error (1)
- Facebook (2)
- Firebase (1)
- FuelPHP (16)
- Git (22)
- GitHub (3)
- Gradle (2)
- GraphAPI (1)
- Grunt (1)
- heroku (2)
- illustrator (1)
- iOS (17)
- Java (4)
- Jenkins (1)
- jQuery (3)
- Kotlin (2)
- Mac (22)
- nginx (1)
- Node.js (3)
- peco (1)
- php (5)
- Python (1)
- Rails (16)
- Ruby (11)
- shell (1)
- SNS (1)
- Swift (2)
- tmux (2)
- Vagrant (6)
- Vim (6)
- windows (2)
- WordPress (3)
- zsh (4)
- フリーランス (1)
- ライブラリ (1)
- 勉強会 (2)
- 宣伝 (1)
- 未分類 (2)
最近の投稿
- [MAC]HighSierraでgitプッシュエラー「Unable to negotiate with xxx.xxx.xxx.xxx port xx: no matching cipher found. Their offer: aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se fatal: Could not read from remote repository.」
- [iOS]iOS11からFacebook,Twitter連携(シェアなど)廃止の対応方法
- [iOS]速報2017AppleSpecialEventのiOS11、iPhone8など発表内容について
- [iOS][Firebase]The default Firebase app has not yet been configured. Add `[FIRApp configure];
- [iOS]2017年9月リリースのiOS11で開発者が対応するべきこと
- 今人気の現金化サービスCASH(キャッシュ)を使ったレビュー
- [Pandoc][Mac]pandocでmarkdownからwordファイル作成
- [Android]映画サマーウォーズの聞いた日付(誕生日)から曜日当てをアプリ音声認識で簡単に実現
- [Android]起動しているActivityを取得するadb shell コマンド
- [Android][Kotlin]kotlin学習で参考になるサイト一覧
アーカイブ
- 2018年5月
- 2017年9月
- 2017年8月
- 2017年7月
- 2017年6月
- 2017年5月
- 2017年2月
- 2017年1月
- 2016年12月
- 2016年7月
- 2016年6月
- 2016年1月
- 2015年12月
- 2015年11月
- 2015年10月
- 2015年9月
- 2015年8月
- 2015年7月
- 2015年6月
- 2015年5月
- 2015年4月
- 2015年3月
- 2015年2月
- 2015年1月
- 2014年12月
- 2014年11月
- 2014年6月
- 2014年5月
- 2014年4月
- 2014年3月
- 2014年2月
- 2014年1月
- 2013年12月
- 2013年11月
- 2013年9月
- 2013年8月
- 2013年7月
- 2013年6月
- 2013年5月
- 2013年4月
- 2013年3月
- 2013年2月
- 2013年1月
- 2012年12月
- 2012年10月
- 2012年5月
- 2010年6月
エントリ