【Active Record】findとwhereで返り値が異なる
状況
whereで取得したレコードセットにメソッドをはやしたらエラーになる。
解決
配列の添字を指定してメソッドを実行する。
コード
Book.where("author LIKE '%#{name}%'").update(author: new_name)
考察
findでIDを指定した場合に返ってくるのはただの変数。whereで条件指定すると配列で返ってくる。 だから、
Book.where(author_id: id).update(price: price)
は失敗する。
ではなくて、こうしなければならない。
Book.where(author_id: id)[0].update(price: price)
ただし、
Book.where(author_id: id).each do |book| book.update(price: price) end
はとおる。
whereの返り値が配列だということを忘れてはならない。