2


nested_form gem で問題が発生しました。
カテゴリ、グループ、パラメータ、オファー、値の 5 つのモデルがあります。したがって、オファーはカテゴリに属し、値はオファーとパラメータに属し、パラメータはグループにまとめられ、グループはカテゴリに属します。
典型的な例は

カテゴリ: 車
  グループ: エンジン パラメータ
    パラメータ: ボリューム
    パラメータ:パワー
  グループ: プロデューサー
    パラメータ: Producer_name
    パラメータ: 年
    パラメーター: 国

カテゴリ: 自転車
  グループ: 技術パラメータ
    パラメータ: 車輪の直径
    パラメータ: 重量
  グループ: プロデューサー
    パラメータ: Producer_name
    パラメータ: 年
    パラメーター: 国

そして、このパラメータの値はオファーに属します。複雑に見えるかもしれませんが、私にはそれを非常に明確に図解したように思えます。ユーザー登録時に多くのオファーを作成できるフォームを作成したいと考えています。カテゴリ、パラメータ、およびグループは固定されています。今私のテンプレートは次のとおりです。

= 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 に答える