【问题标题】:Rails Dynamic Multi Model Form attributesRails 动态多模型表单属性
【发布时间】:2009-07-30 03:01:51
【问题描述】:

这个问题一直困扰着我。我玩弄了 Ryan Bates 复杂的表格,但我无法完全弄清楚我的问题。 我有这个架构:


Location has_many :targets
Target has_many :target_classifications

所有位置都显示在页面上。用户可以通过 jscript 为任何位置动态创建目标,然后在位置 3 选择(包含目标的可用分类)下添加一个表格行和一个目标值。在单击保存之前,可以为任何位置创建任意数量的目标。
我正在使用 rjs 渲染一个 target_partial,它具有以下代码: 我以这种方式使用fields_for:



对于每个选择。提交后,我得到了这个哈希:

“新目标”=>
  {"7"=>[{"id"=>"13"}, {"id"=>"15"}, {"value"=>"67", "id"=>""}],
   “4”=>
    [{"id"=>"12"},
     {"id"=>"15"},
     {"值"=>"23", "id"=>""},
     {"id"=>"11"},
     {"id"=>"16"},
     {"值"=>"67", "id"=>""}]},

因此,它按位置分隔每个目标(在本例中为“7”和“4”),但不分隔每个目标。我想要的是这样的:

“新目标”=> {"7"=>[ {"target"=>[{"id"=>"13"}, {"id"=>"15"}, {"tonnes"=>"67"}]} ], “4”=>[ {"目标"=>[{"id"=>"12"},{"id"=>"15"},{"tonnes"=>"23"]}, {"目标"=>[{"id"=>"11"},{"id"=>"16"},{"tonnes"=>"67"]} ] }

所以我可以遍历每个位置的每个目标。我似乎无法在我的 field_for 方法中添加一个新的 [target] 大括号(它会爆炸),但这就是我想要做的。有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    不知道你是不是这样,但是在使用fields_for的时候需要指定一个字符串而不是对象。我看不到你的部分代码,所以我可能会走开。无论如何,我这样做的方式是在一个助手中:

    def fields_for_target(target, &block)
      prefix = target.new_record? ? 'new' : 'existing'
      fields_for("location[#{prefix}_target_attributes][]", target, &block)
    end
    

    【讨论】:

    • @brad:我不确定,但我认为 fields_for 中的这些“[]”可以满足您的需求
    【解决方案2】:

    这类问题在这里讨论:

    http://wonderfullyflawed.com/2009/02/17/rails-forms-microformat/

    但这似乎是一个 rails 2.3 解决方案(对我来说不是一个选项)。基本上,我想要他们在网站上发布的表格:

    <input name="creator[widget_attributes][0][id]" />
    <input name="creator[widget_attributes][0][name]" />
    <input name="creator[widget_attributes][0][price]" />
    
    <input name="creator[widget_attributes][1][id]" />
    <input name="creator[widget_attributes][1][name]" />
    <input name="creator[widget_attributes][1][price]" />
    

    只是为我要添加的每个目标(或在本例中为小部件属性)创建唯一标识符的某种方式。鉴于使用 jscript 添加了新目标,这有点困难。我觉得应该有一些方法可以让 rails 自动为我执行此操作

    【讨论】:

      【解决方案3】:

      简单。查找accepts_nested_attributes_for。 :)

      【讨论】:

      • 正如我提到的那样,rails 2.3 目前不是我的选择。所以这行不通
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-19
      • 2018-10-23
      • 2016-12-15
      • 1970-01-01
      • 1970-01-01
      • 2016-03-17
      • 2019-03-04
      相关资源
      最近更新 更多