ユーザーコントローラーでユーザーの写真を作成するための次のコードがあります。
def new
@user = User.new
@pictures = @user.pictures.build({:placement => "front"},{:placement => "profile"})
end
ただし、新しいユーザーを作成すると、配置が「正面」または「横顔」の写真が自動的に作成されません。実際、写真の更新は一切ありません。写真のモデルは
attr_accessible :placement
そしてpicture.rbで
belongs_to :user
そしてuser.rbで
has_many :pictures
accepts_nested_attributes_for :pictures, allow_destroy: true
ビルド コマンドがサイレントに失敗するのはなぜですか?
アップデート
.save! を使用して@pictures
、割り当てられていることを知りましたが、問題はそれらに関連付けられている user_id ではありません。次のように、意図的に user_id を割り当てると、
def new
@user = User.new
@pictures = @user.pictures.build({:placement => "front", :user_id => @user.id},{:placement => "profile", :user_id => @user.id})
end
まだ user_id を割り当てていません。
奇妙なことに、Rails コンソールでまったく同じコマンドを実行すると、user_id が正しく割り当てられます。
@pictures コマンドが実行されるまで、新しい @user に自動 ID が割り当てられないように見えますが、コンソール バージョンは操作を順番に実行しているため成功しています。
そのため、空白の ID が表示されます。
なぜこうなった?そして、この同時ID割り当ては、モデルがbelongs_to
and has_many
、 andで処理することになっているものではありaccepts_nested_attributes_for
ませんか?
それらをリンクするIDが保存後まで作成されない場合、ネストされた属性の割り当てに対処する適切な方法は何ですか?
これが機能しないのはなぜですか?