カテゴリー:
Rails
タグ:
 Rails attributes assign_attributes

このエントリーをはてなブックマークに追加
更新日時:
2014年01月17日(金)
作成日時:
2013年06月15日(土)

前の記事 / 次の記事

嵌ったのでメモ。

結論を先に書くと

obj.attributes(params[:model])

っていう書き方は出来なくて、

obj.attributes = params[:model]

と書かなければいけない。
最初みたいに書きたい場合は assign_attributes が使える。

obj.assign_attributes(params[:model])

参考:
http://d.hatena.ne.jp/zariganitosh/20070206/1170762646
ActiveRecord::AttributeAssignment

obj.attributes

っていうのは、カラムがハッシュになって返ってくるのと、
ハッシュに値を入れて保存するとカラムが更新される。

値をセットしたい時は、

obj.attributes = params[:model]

とか

obj.attributes[:name] = unko

とかして保存すればカラムを更新できる。
Railsには update_attributes とか collection.build とかあって

@author = Author.find(1)
@author.update_attributes(params[:author])

とか

@author = Author.find(1)
@author.books.build(params[:book])

とか出来る。

だから、一生懸命

obj.attributes(params[:model])

とかやって全然出来なくて嵌まったという話。
で、そういうことやりたい場合は、assign_attributes を使えばよかった。

obj.assign_attributes(params[:model])