0

大量割り当てを避けるために、自分自身のためのより体系的な解決策が必要です。

典型的な状況は、id または user_id を params (フォーム経由で自動的に送信される) から削除し、内部で (MyController#create で) current_user.id に置き換えることです。

私が考えることができる解決策は、params ハッシュからオブジェクトを作成し、(親オブジェクトと子オブジェクトの) update_attributes を作成して、機密属性を内部値に置き換えることです。

@user = User.create(:params[:user])
@user.update_attributes(:id => current_user.id)
@user.profile.update_attributes(:user_id => current_user.id)
@user.preference.update_attributes(:user_id => current_user.id)

これを言うためのより短い/よりドライな方法はありますか?

設定、プロファイルなどがユーザーの子オブジェクト (build メソッドで作成) である場合、ユーザーの外部キーを検索し、それらを親に渡した値に自動的に置き換えるメソッドを作成するにはどうすればよいですか?

ありがとうございました。

4

2 に答える 2

1

これがと(ドキュメント)の目的ですattr_protected。ホワイトリストを使用して保護しながら、ブラックリストを保護します。attr_accessibleattr_protectedattr_accessible

一括割り当てが機能した直後に呼び出すupdate_attributes場合でも、モデルで一括割り当てを行うたびにコードを複製する必要がないため、一括割り当てを保護する組み込みの方法を使用することをお勧めします。

于 2012-01-09T16:16:19.800 に答える
1

以前のプロジェクトで次を使用してこれを行いました。

@user = User.create(params[:user]) do |user|
    user.id = current_user.id
end

これはうまくいきますか?

別の方法は、ドキュメントをチェックアウトして:as、役割ベースの属性を検索することです。

于 2012-01-09T20:48:45.233 に答える