我试图以稍微不规则的方式使用accepts_nested_attributes_for
。
估计有很多款项:
class Estimate
has_many :moneys , :as => :moneyable, :dependent => :destroy
accepts_nested_attributes_for :moneys
...
end
但是在估算的编辑表单中,我不希望用户看到所有先前资金的嵌套字段集'值。我只想让她看到一组空钱币。来自Rails'从观点来看,估计将具有所有先前货币的良好历史,但是从用户的角度来看,如果她想要改变估计,她将仅看到一些她可以填写的空字段。
= f.semantic_fields_for @estimate.moneys.build do |money|
= money.input :quantity
...
通常你会f.semantic_fields_for :moneys
,但这会显示以前所有的儿童资金记录。我也可以使用javascript动态生成字段,但我想避免这样做,因为它是用户必须点击的另一个按钮。因此,我在表单中构建一个新对象(出于正派的考虑,我最终可能会转移到控制器上)。
麻烦的是,如果我按照上面的形式构建一个新对象,我就不会获得accepts_nested_attributes_for
善良,因为Rails不会将这些钱参数传递给:money_attributes
。它会将其作为:money
传递给他们:
Parameters: {..."estimate"=>{"book_id"=>"1418", ..., "money"=>{"quantity"=>"321",...}}, "commit"=>"Save", "id"=>"67"}
我可以在控制器中进行操作,添加父的id(和类型,在这种情况下,因为它是一个多态关系),但这很难看。我错过了一种方法,我可以在构建新对象时使用ANAF并且不向用户显示视图中的所有子记录吗?
答案 0 :(得分:0)
然后条件可能如下:
= f.semantic_fields_for @estimate.moneys.build do |money|
- if money.object.new_record?
= add your form attribute here
因此,这只会让您显示表单,为您的表单创建一个新的嵌套记录。
我希望这个答案至少能给出一个想法。