【发布时间】:2012-08-09 02:10:14
【问题描述】:
我有以下代码在我的用户控制器中为用户创建图片:
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。
看来新@user 直到@pictures 命令运行后才获得分配给他的自动ID,但控制台版本成功,因为它正在按顺序执行操作。
所以,这就是我看到空白 ID 的原因。
为什么会这样?模型不应该使用belongs_to 和has_many 和accepts_nested_attributes_for 来处理这种同时分配的id 吗?
如果在保存之后才创建将嵌套属性链接在一起的 ID,那么解决分配嵌套属性的适当方法是什么?
为什么这不起作用?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 model-view-controller nested-attributes