我有一个带有多步表单的 Rails 3 应用程序,我使用此 railscast 开发:http: //railscasts.com/episodes/217-multistep-forms
在表单的第三步(不是最后一步)中,我有一组字段,称为“受众”,其中包含 4 个选择框。
使用 Jquery,我在这组字段旁边有“添加”和“删除”链接,这样我就可以在表单中拥有多个“受众”。
例如,我从 1 个受众开始。如果我点击“添加”,那么我有另一个受众,总共有 2 个受众(2 组字段)。但是,如果我单击“删除”,那么该受众将从表单中删除,我将再次留下 1 个受众(1 组字段)。
此受众表单是嵌套的。我为此使用了嵌套表单 gem:https ://github.com/ryanb/nested_form/
我的问题是,无论我尝试什么,表单的此受众部分似乎都无法正常工作。现在,当 Audience 表单页面第一次加载时,“删除”链接根本没有出现,每次我点击“添加”链接时,都会添加 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