1

このRailscastを使用して開発したマルチステップフォームを備えたRails 3アプリがあります: http://railscasts.com/episodes/217-multistep-forms

私のフォームの 3 番目のステップ (最後のステップではありません) には、4 つの選択ボックスを含む「オーディエンス」と呼ばれるフィールドのグループがあります。

Jquery を使用して、このフィールド グループの横に「追加」および「削除」リンクを配置し、フォームに複数の「対象ユーザー」を含めることができるようにしました。

たとえば、私は 1 オーディエンスから始めます。「追加」をクリックすると、合計 2 つのオーディエンス (フィールドの 2 つのグループ) に対して別のオーディエンスが作成されます。ただし、「削除」をクリックすると、そのオーディエンスがフォームから削除され、1 つのオーディエンス (フィールドの 1 つのグループ) が再び残ります。

このオーディエンス フォームはネストされています。これにはネストされたフォームの宝石を使用しました: https://github.com/ryanb/nested_form/

私の問題は、何を試しても、フォームのこの Audience 部分が正しく機能しないように見えることです。現在、オーディエンス フォーム ページが最初に読み込まれると、「削除」リンクがまったく表示されず、「追加」リンクをクリックするたびに、1 つではなく 2 つのフィールド グループが追加されます。ページを開き、再びオーディエンス フォームに戻ると、「削除」リンクが再び表示されますが、「追加」リンクは同じことを行います。ページに戻るたびに、「追加」リンクをクリックしなくてもフィールドが追加されます。また、フィールドの数に制限を設定しましたが、それも機能しません。

私は 1 週間の大半をこの問題に費やしましたが、まだ理解できません。私の Jquery スキルは素晴らしいものではありませんが、基本的なことはできます。繰り返し提案を求めてきましたが、うまくいきません。この時点で私は必死です...私はすでに数日前に頭を壁にぶつけ始めました.

ここで必要なものの良いデモがあります。「ビート」をフィールドのグループに置き換えるだけです: http://jsfiddle.net/beehive/8zJr6/

これに対する解決策の提案は大歓迎です。たぶん、まったく別のアプローチをとるべきでしょうか?

アプリケーション.js

$(document).ready(function() {

    // Nested Audience form
    var x = $('#audiencefields');
    var i = $('#audiencefields p').size() + 1;

    $('#addlink').live('click', function() {
        if ($(".item", x).length < 3) {
            $('<p class="item" id="audiencecontainer">beets '+ i +'#removelink').appendTo(i);
            i++;
        }
        return false;
    });

    $('#removelink').live('click', function() {
        if (i > 2) {
            $(this).parents('p').remove();
            i--;
        }
        return false;
    });


});

_audience_step.html.erb

<div class="uploadcontent">
    <h1 class="uploadtitle">select your audience</h1>
    <div id="audiencefields">
        <p id="audiencecontainer">
            <%= f.fields_for :audiences do |audience_form| %>
                <ul class="uploadformlist">
                  <li>  
                    <%= audience_form.label :number_of_people, "Size" %><br />
                    <%= audience_form.collection_select :number_of_people, Audience::PEOPLE, :to_s, :to_s, :include_blank => true %>
                  </li>
                  <li>
                    <%= audience_form.label :gender %><br />
                    <%= audience_form.collection_select :gender, Audience::GENDERS, :to_s, :to_s, :include_blank => true %>
                  </li>
                  <li>
                    <%= audience_form.label :age %><br />
                    <%= audience_form.collection_select :age, Audience::AGES, :to_s, :to_s, :include_blank => true %>
                  </li>
                  <li>
                    <%= audience_form.label :ethnicity %><br />
                    <%= audience_form.collection_select :ethnicity, Audience::ETHNICITIES, :to_s, :to_s, :include_blank => true %>
                  </li>
                </ul>
                <%= audience_form.link_to_remove "Remove this audience", :id => "removelink" %>
           <% end %>
        </p>
   </div>
   <p><%= f.link_to_add "Add another audience", :audiences, :id => "addlink" %></p>

</div>

オーディエンス.rb

class Audience < ActiveRecord::Base
  attr_accessible :age, :ethnicity, :gender, :number_of_people

  belongs_to :upload

  #validates_presence_of :age, :ethnicity, :gender, :number_of_people

  PEOPLE = ['5', '10', '25', '50', '75', '100']
  GENDERS = ['Male', 'Female']
  ETHNICITIES = ['Caucasian/White', 'African-American/Black', 'Latin/Hispanic', 'Asian', 'Indian', 'Middle-Eastern', 'Native American']
  AGES = ['0-2', '3-5', '6-12', '13-17', '18-29', '30-39', '40-49', '50-59', '60+']
end
4

0 に答える 0