77
69

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rails4はattr_accessibleが使えない

Last updated at Posted at 2014-03-09

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

別のところに書いちゃえばすっきり。
こう書けばコードをぱっと見た時の意味も伝わりやすい気がする。

77
69
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
77
69

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?