我在过去的几个小时里与这个错误作斗争,我无法理解它,我的研究没有给出答案。HABTM关系中的多重嵌套形式
这是一个基本的HABTM关系。输入HABTM可视化,并且我有一个交叉表InputsVisualizations,它具有自己的一些属性。
= form_for(@visualization) do |f|
= f.input :title
= f.fields_for :inputs_visualizations do |iv|
= iv.input :color
= iv.fields_for :input do |i|
= i.input :title
= f.button :submit, "Save"
class Input < ActiveRecord::Base
# Associations ------------------
has_many :inputs_visualizations, dependent: :destroy, order: "inputs_visualizations.order ASC"
has_many :visualizations, through: :inputs_visualizations
# Attributes --------------------
attr_accessible :title, :unit
end
class InputsVisualization < ActiveRecord::Base
# Associations ------------------
belongs_to :input
belongs_to :visualization
# Attributes --------------------
attr_accessible :input_id, :visualization_id, :color, :input_attributes
accepts_nested_attributes_for :input, :reject_if => lambda { |i| i[:title].blank? }, :allow_destroy => true
end
class Visualization < ActiveRecord::Base
# Associations ------------------
has_many :inputs_visualizations, dependent: :destroy, order: "inputs_visualizations.order ASC"
has_many :inputs, through: :inputs_visualizations, order: "inputs_visualizations.order ASC"
# Attributes --------------------
attr_accessible :title, :inputs_visualizations_attributes
accepts_nested_attributes_for :inputs_visualizations, :reject_if => lambda { |a| a[:input_id].blank? }, :allow_destroy => true
end
我需要一个表单让我管理InputsVisualizations和Inputs。正如你在我的表格中看到的那样,有两个嵌套的fields_for。
案例1: 我创建了嵌套Inputs的嵌套InputsVisualization(都是new_record)。我保存表格,它们都被创建。凉!
案例2: 从同样的形式,我更新输入(现有记录)。我保存,即使属性正确传递给控制器,也不会更新任何内容。
我读到nested_attributes不与belongs_to关系一起工作,虽然它创建它就好了。为什么之后没有更新?
感谢
请在问题中包含代码详细信息,以便即使您的github条目消失,未来的Stack Overflow读者也能理解问题。我发现你在'visualization.rb'中有一个':reject_if'条件,它查找':input_id',但是这个值不是你表单的一部分。这是什么':reject_if'检查?另外,你可以分享你的控制器的代码吗? – cschroed
谢谢,这确实是我的问题的原因。 – karellm