.build不能分配尚不存在外键(.build can't assign foreign k

2019-10-17 03:16发布

我有在我的用户控制用户创建的照片下面的代码:

  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

为什么我的生成命令默默地失败?

UPDATE

使用.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。

奇怪的是,当我在铁轨控制台中运行同样的命令,它不正确地分配 USER_ID。

看来,新@user没有得到分配给他,直到@pictures命令后自动识别运行,但家用机版正在取得成功,因为它是按顺序执行的操作。

所以,这就是为什么我看到一个空白的ID。

这究竟是为什么? 而不是此同步ID分配一些模型应该照顾有belongs_tohas_manyaccepts_nested_attributes_for

什么是解决如果没有创建链接在一起的ID,直到保存后分配嵌套属性的适当方法?

为什么这个不行?

Answer 1:

不知道这是你的问题,但你需要添加:USER_ID在picture.rb你attr_acessible线。 你想读的任何属性/写必须attr_accessible或者你会得到大规模分配错误。



Answer 2:

它在文档:用户ID是由数据库分配的,它被保存后。 所以,你必须先保存用户,才可以使用USER_ID。

如果你改变:USER_ID => @ user.id于:用户=> @user它应该工作,因为那时Rails是能够将它们保存在正确的顺序,它知道它尚未保存,需要更新这些关系。



文章来源: .build can't assign foreign key that doesn't exist yet