5

我有一个这种 Railscast http://railscasts.com/episodes/196-nested-model-form-revised?view=asciicast风格的嵌套模型表单

我需要给每个标签一个唯一的 ID。目前,生成的每个字段都有一个唯一的 ID 和名称,由帮助方法给出,该方法为每个关联记录分配一个唯一的 ID。所以这被照顾了。但是,此表单具有未分配 ID 的“fieldset”标签。出于 jQuery 操作目的,我需要每个字段集的唯一 ID。

具体来说,如何为“活动”记录生成的每个字段集提供唯一的 CSS 标记 ID?下面发布的是我的表单是如何创建的。谢谢

_form.html.erb

<%= form_for(@trip) do |f| %>

<%= f.fields_for :days do |builder| %>
  <%= render 'day_fields', f: builder %>
<% end %>
<%= link_to_add_fields "Add Day", f, :days %>

_day_fields.html.erb 部分

<fieldset>
  <%= f.label :summary, "Day Summary" %><br />
  <%= f.text_area :summary, :rows => 1 %><br />
    <%= link_to "remove", '#', class: "remove_fields" %>

  <%= f.fields_for :activities do |builder| %>
    <%= render 'activity_fields', f: builder %>
  <% end %>
  <%= link_to_add_fields "Add Activity", f, :activities %>
</fieldset>

_activity_fields.html.erb

<fieldset>
  <%= f.label :title, "Activity" %><br />
  <%= f.text_field :title, :rows => 1 %><br />
  <%= f.hidden_field :_destroy %>
  <%= link_to "remove", '#', class: "remove_fields" %>
</fieldset>
4

3 回答 3

3

如果您使用的是 ryanb nested_form gem :

改为使用f.index。并确保在您的部分中传递每个不同的 form_builder。

例如,如果你这样做

<%= main_form.fields_for :nested1_items do |nested1_form| %>
    <%= render partial 'main/nested1_fields', nested1_form: nested1_form %>
<% end %>

_nested1_fields

<fieldset id="nested1-<%= nested1_form.index %>-items">

请参阅我在这个问题中的回答。

于 2014-11-11T12:00:01.440 回答
1

为什么不只使用f.object传入的两个部分?

<% fieldset_id = "#{f.object.class.underscore}_#{f.object.id}" %>
<fieldset id='<%= fieldset_id %>'>
...
于 2012-11-02T05:18:52.000 回答
0

我有一个类似的问题,我使用以秒为单位的时间来解决它,并将它传递到我需要的每个地方。

例如:

控制器中

def something
  # First idea
  @dynid = Time.now.to_i
  ...
  # Second idea: store it in the session
  session[:dynid] = Time.now.to_i
  ...
end

在你看来

<fieldset id="#{@dynid}">
<!-- or in case @dynid is out of reach, then use the session[:dynid] -->
<fieldset id="#{session[:dynid]}">

session[:dynid}即使使用 ajax 呈现的代码,它仍然有效。

我希望这可以帮助你。

于 2012-11-02T06:58:31.520 回答