我有一个这个Railscast风格的嵌套模型表单 http://railscasts.com/episodes/196-nested-model-form-revised?view=asciicast
我需要为每个标记提供唯一的ID。目前,生成的每个字段都有一个唯一的ID和名称,由辅助方法给出,该方法为每个关联记录分配唯一的ID。所以这是照顾的。但是,此表单具有“fieldset”标记,但未分配ID。我需要为每个字段集使用唯一的ID来进行jQuery操作。
具体来说,如何为“活动”记录生成的每个字段集都提供唯一的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 partial
<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>
答案 0 :(得分:2)
如果您使用的是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">
请参阅我的回答in this question。
答案 1 :(得分:1)
为什么不使用传递给两个部分的f.object
?
<% fieldset_id = "#{f.object.class.underscore}_#{f.object.id}" %>
<fieldset id='<%= fieldset_id %>'>
...
答案 2 :(得分: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]}">
即使使用ajax渲染代码,session[:dynid}
仍然有效。
我希望这会对你有所帮助。