作成中
Rail4ではfindは廃止
http://railsdoc.com/references/find
rails3からrails4で大きく変更があったメソッドの一つ。find(:all)やfind(:all, :conditions ...)などの書き方が廃止になりました。whereなどを使うようにしてください。
※AREL(https://github.com/rails/arel#readme)が導入されたによる影響。ActiveRecordのfindが使えなくなった訳ではない。
where
Model.where("id = ?", 10).first # 複数指定する場合は配列を使用 Model.where("id IN (?)", [10, 20]) # joinがある場合 Model.where("models.id = ?", 10).first Model.where("models.id IN (?)", [10, 20])
参考:http://ryopeko.hatenablog.com/entry/20101215/1292373612
Arelで組み立てたSQLをfind_by_sqlで実行
http://d.hatena.ne.jp/takihiro/20100923/1285215139
sql = model.project(config[:id]).where(config[:name].eq('hoge')).to_sql Model.find_by_sql(sql)
pluckメソッド
puts Model.pluck(:id) # "puts T_config_file.select(:id).map(&:id)"と同価
sqlを表示
puts Model.pluck(:id).to_sql #=> SELECT `models`.`id` FROM `models`
[explain]
puts Model.pluck(:id).explain
distinctはuniqを使用
Client.select('DISTINCT name') # 以下も同じ動作 Client.select(:name).uniq
find
# id列、name列を表示 Model.find(:all, :select => "id, name")
[プレースホルダ]
# ex1 Model.find(:all, :conditions => ["id = ? and name = ?", params[:id], params[:name]]) # ex2 Model.find(:all, :conditions => ["id = :id and name = :name", {:id => params[:id], :name => params[:name]}])
find_by_
result = Model.find_all_by_id(1) result.to_a.each do |p| puts p[:id] end
find_by_sql
sql = "select * from models where id = ? and name = ?" id = 1 name = 'foo' Model.find_by_sql([sql, id, name]) cond = Hash.new sql = "select * from models where id = :id and name = :name" cond[:id] = 1 cond[:name] = 'foo' Model.find_by_sql([sql, cond])
テーブル定義を表示
# カラム数を表示 puts Model.columns.size #=>4 # カラム名を表示 puts Model.columns.map { |e| e.name } ["id", "name", "tel", "mail"] # 属性を表示 puts Model.columns.map { |e| e.sql_type } ["int(10)", "varchar(30)", "int(10)", "int(10)"]