3

たぶん私は間違っているかもしれませんが、ここに私の問題があります:

@restaurant = current_user.restaurants.build(params[:restaurant])

これにより、user_id が に設定された新しいレストラン オブジェクトが作成されますcurrent_user.idattr_accessible :user_idこれは、レストラン モデルを設定した場合にのみ機能します。そうでない場合は、

ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes:
user_id

私が望むのは、user_id経由を定義することですが.build、同時にattr_accessible :user_id、誰かがこのレコードの user_id を他のユーザーの ID に設定する可能性があるため、これは望ましくありません!!

.build外部キーはこの Mass Assignment Security から除外され、関連付けまたは.createメソッドを介して新しいオブジェクトを作成すると強制されると思いました。

助言がありますか?に戻りたくない

@restaurant = current_user.restaurants.build(params[:restaurant])
@restaurant.user = current_user

その種の目的を無効にするため.build

4

1 に答える 1

3

Rails 3.2.0.rc1 を使用していますか? それは既知のバグです github.com/rails/rails/issues/4051 (解決済み)

于 2011-12-23T14:14:08.800 に答える