この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