过去几个小时我正在与这个bug斗争,我无法理解它,我的研究也没有给出答案。
这是一种基本的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: 我创建了一个嵌套的InputsVisualization与嵌套的输入(都是new_record)。我保存表单,它们都是创建的。酷!
案例2: 从同一表格中,我更新了一个输入(现有记录)。我保存,即使属性已正确传递给控制器,也不会更新任何内容。
我读到nested_attributes不能与belongs_to关系一起使用,尽管它创建它很好。之后为什么不更新?
由于
答案 0 :(得分:1)
此行上的:reject_if
条件会查找:input_id
,但该值不包含在表单中。因此,这可能会阻止更新通过。
accepts_nested_attributes_for :inputs_visualizations, :reject_if => lambda { |a| a[:input_id].blank? }, :allow_destroy => true