1

我有一个带有多步表单的 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
4

0 回答 0