Nested_form gem:使用link_to_add传递参数

时间:2012-10-28 03:22:09

标签: ruby-on-rails nested-forms nested-form-for


我遇到了nested_form gem的问题 我有5个型号:类别,组,参数,报价和价值。 因此,商品属于类别,价值属于商品和参数,参数在组合中,组属于类别。
典型示例如

Category: car
  Group: engine parameters
    Parameter: volume
    Parameter: power
  Group: producer
    Parameter: producer_name
    Parameter: year
    Parameter: country

Category: bicycle
  Group: technical parameters
    Parameter: wheel diameter
    Parameter: weight
  Group: producer
    Parameter: producer_name
    Parameter: year
    Parameter: country

此参数的值属于商品。也许看起来很复杂,但在我看来,我说得很清楚。 我想构建表单,允许在用户注册期间创建许多商品。类别,参数和组是固定的。 现在我的模板是:

= simple_nested_form_for @user
  Category.all.each do |category|
    span= category.name
    = f.simple_fields_for :offers do |f_offer|
    = f_offer.input :category_id, :as => :hidden
    - category.groups.each do |group|
      span= group.name
      - if f_offer.object.values.where("parameter_id IN (?)", group.parameters).empty?
        - group.parameters.each do |parameter|
          - variant.values.build(:parameter_id => parameter.id)
      / In this partial inputs for offer values in format parameter_name: input_field
      = render :partial => 'values', :locals => { :f_offer => f_offer,
          :f_group => group }
    = f_variant.link_to_remove t("views.remove_variant")
  = f.link_to_add "Add offer", :offers

它工作得很好,但问题是当我点击“添加商品”链接 - 表格添加了最后一个类别的参数。 所以我上面给出的例子,当我点击汽车类别的“添加报价”时 - 我看到一堆参数不是用于汽车,而是用于自行车!看起来我应该将类别传递给simple_fields_for或类似的东西,但我不知道该怎么做。
任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决此问题的方法:我添加了一个新的操作,例如“generate_form”,我在其中创建了新用户并向其添加了新的商品,并且在视图中我为这个新用户生成了带有嵌套字段的表单报价。

当用户点击“添加商品”链接时,我对此generate_form操作执行ajax请求,传递类别ID,但是作为响应我得到了,所以我剪切了嵌套表单,使用jQuery很容易,而且我还需要替换零提供随机生成的id,这两者都是由ajax“完成”回调执行的。

也许很难看,但最后还是有效的。 如果有人能提供另一种解决方案 - 我会很高兴看到它。