Ruby on rails 在新建/生成时删除外键
希望有人能帮助我理解为什么会发生这种情况。我设置了以下实例Ruby on rails 在新建/生成时删除外键,ruby-on-rails,foreign-keys,instance-variables,Ruby On Rails,Foreign Keys,Instance Variables,希望有人能帮助我理解为什么会发生这种情况。我设置了以下实例 @product = Product.find(params[:id]) @new_image = @product.images.new 当我调试@new_image时,它正确地设置了外键 --- !ruby/object:Image attributes: product_id: 1 但是,保存时,未设置产品\u id。就在那时,我注意到,在调试信息中,也是这样 changed_attri
@product = Product.find(params[:id])
@new_image = @product.images.new
当我调试@new_image
时,它正确地设置了外键
--- !ruby/object:Image
attributes:
product_id: 1
但是,保存时,未设置产品\u id
。就在那时,我注意到,在调试信息中,也是这样
changed_attributes:
product_id:
基本上是将外键置零。如果我使用build,也是一样的。为什么该实例没有保留外键
更新:
为了使事情更简单,即使我只是在视图中输出debug Product.find(1).images.new
,我也会得到:
!ruby/object:ProductImage
attributes:
created_at:
product_id: 1
updated_at:
attributes_cache: {}
changed_attributes:
product_id:
destroyed: false
marked_for_destruction: false
new_record: true
previously_changed: {}
readonly: false
据我所知,您的产品的
show
视图包含一个表单,可将其发布到图像
控制器。当您基于视图中的@product
创建@new\u image
变量时,它会将@product\u id
正确分配给图像。但是,当您发布表单时,这种情况不会持续
你有两个选择。最简单的方法是只在表单中添加一个
项,这样产品id实际上会被发布到图像#create
。或者,您可以创建一个嵌套资源并执行
而不是您现在可能正在使用的
,然后在创建方法中执行以下操作:
@product = Product.find(params[:product_id])
@new_image = @product.images.new(params[:image])
你能发布你完整的控制器代码来进行保存吗?也许还有你的产品
和图像
模型的内容?好的,那么你发布的前两行具体在哪里被调用?在我的产品控制器的show方法中,你的产品#show方法是否包含一个表单,然后发布到图像#create?是的,但是,我在changed\u attributes
中看到空的产品标识,它还没有到达表单。我完全从等式中删除了控制器,如上次更新中所示。