attr_accessibleが反映されているか確認する方法

Ruby on Railsで、確かにモデルの定義で

といったように定義しているにもかかわらず、

といったコードを実行すると、

ActiveModel::MassAssignmentSecurity::Error Exception: Can’t mass-assign protecte
d attributes: name_ruby

といった例外が発生する。

 

本当にattr_accessibleが正しく動作しているか疑問に感じ、

irb(main):001:0> Person.first._accessible_attributes
Person Load (0.0ms) SELECT “people”.* FROM “people” LIMIT 1
[0m
EXPLAIN (0.0ms) EXPLAIN QUERY PLAN SELECT “people”.* FROM “peopl
e” LIMIT 1
EXPLAIN for: SELECT “people”.* FROM “people” LIMIT 1
0|0|0|SCAN TABLE people (~1000000 rows)

=> {:default=>#<ActiveModel::MassAssignmentSecurity::WhiteList: {“”, “name”}>}

として確認してみた。

すると、attr_accessibleメソッドに指定したはずの:name_rubyが反映されていない!

(attr_accessibleメソッドは、簡単にいうと実際には_accessible_attributes配列に一括指定可能なフィールド名を追加しているだけ。)

 

ここで目が覚めた。

Personモデルでattr_accessibleメソッドを記述していたと思ったのが、Postモデルでattr_accessibleメソッドを記述して、反映されないと頭を抱えていただけだった。

コメントを残す

トラックバック: http://pgnote.net/wp-trackback.php?p=556