Mass Assignment脆弱性(よくわかってないけれど大変そう)を突かれないようにするために、railsではattr_accessibleとかのメソッドが用意されています。
user.rb
attr_accessible :name, :email
rails3で作ったアプリを4に上げてみたら
undefined method `attr_accessible'
エラーが発生。
「ないの?」と思って調べたら、attr_accessibleは非推奨になったらしい。
modelのattr_accesibleを削除して、代わりにcontrollerの方でStrongParameters(よくわかっていない)を設定するらしい。
一例だとこんな感じ。users/create
users_controller.rb
def create
#attrのところはなんでもいい
attr = params.require(:user).permit(:name, :email)
@user = User.new(attr)
end
みたいな感じで。
今は値が2つだからそうでもないですけど多くなったらcontrollerの見た目が悪くはないですか、と思って
「おいおい改悪かよ」と初心者がほざいていましたが、scaffoldで遊んでいたら、いい感じの書き方を発見。
users_controller.rb
def create
@user = User.new(user_params)
end
def user_params
params.require(:user).permit(:name, :email)
end
別のところに書いちゃえばすっきり。
こう書けばコードをぱっと見た時の意味も伝わりやすい気がする。