Railsのmass assignment対策

基本、attr_protected か attr_accessible。


どっちかと言われると、札幌Ruby会議03の動画メモのように

attr_protectedを使いましょう!!
 accessibleは事故の元
 未来に追加される属性も拒絶指定
 継承元やモジュールやプラグインで使われていたら大変

極力attr_protected がいいのかなと。
まぁ、未来に追加される項目については、
追加時にテストするだろうから、それほど気にすることではない気がします。
ですので、attr_accessibleでもいいのかなぁ。

whitelist_attributes

Rails3.1以降から
whitelist_attributes というmass assingment対策をしないと
例外を発生させるオプションが追加されていたようです。
これを仕込んでおくというのも、いい気がします。

#config/application.rb

config.active_record.whitelist_attributes = true
例外

こんな感じ。

ActiveModel::MassAssignmentSecurity::Error in PostsController#update
Can't mass-assign protected attributes: name, title, content, tags_attributes