我有以下代码用于在我的用户控制器中为用户创建图片:
def new
@user = User.new
@pictures = @user.pictures.build({:placement => "front"},{:placement => "profile"})
end
但是,当我创建一个新用户时,它不会自动构建带有“正面”或“个人资料”位置的图片。实际上,图片没有任何更新。图片模型有
attr_accessible :placement
并在图片.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。
似乎新的@user 直到@pictures 命令运行后才获得分配给他的自动ID,但控制台版本成功,因为它正在按顺序执行操作。
所以,这就是为什么我看到一个空白的 id。
为什么会这样?这种同时的 id 分配难道不是模型应该用belongs_to
and 和has_many
and来处理的accepts_nested_attributes_for
吗?
如果在保存之后才创建将它们链接在一起的 ID,那么解决分配嵌套属性的适当方法是什么?
为什么这不起作用?