2


我遇到了nested_form gem 的问题。
我有 5 个模型:类别、组、参数、报价和价值。所以Offers属于Category,Values属于Offers和Parameters,Parameters属于Groups,Groups属于Category。
典型的例子就像

类别:汽车
  组:发动机参数
    参数:音量
    参数:功率
  组: 制片人
    参数:生产者名称
    参数:年份
    参数:国家

类别:自行车
  组: 技术参数
    参数:轮径
    参数:重量
  组: 制片人
    参数:生产者名称
    参数:年份
    参数:国家

这个参数的值属于offer。也许看起来很复杂,但在我看来,我已经很清楚地说明了它。我想构建表单,允许在用户注册期间创建许多优惠。类别、参数和组是固定的。现在我的模板是:

= 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 或类似的东西,但我不知道该怎么做。
谁能帮我?

4

1 回答 1

0

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

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

也许相当丑陋的方式,但最终它的工作原理。如果有人可以提供另一种解决方案 - 我会很高兴看到它。

于 2012-11-11T06:42:39.100 回答