Html 循环中调用的表单_重载ID并错误地关联字段和标签

Html 循环中调用的表单_重载ID并错误地关联字段和标签,html,ruby-on-rails,forms,loops,Html,Ruby On Rails,Forms,Loops,Rails喜欢在循环中生成所有字段时给它们相同的ID,这会带来麻烦 <% current_user.subscriptions.each do |s| %> <div class="subscription_listing"> <%= link_to_function s.product.name, "toggle_delay(this)"%> in <%= s.calc_time_to_next_arrival %> days

Rails喜欢在循环中生成所有字段时给它们相同的ID,这会带来麻烦

<% current_user.subscriptions.each do |s| %>
  <div class="subscription_listing">
    <%= link_to_function s.product.name, "toggle_delay(this)"%>
    in <%= s.calc_time_to_next_arrival %> days.
    <div class="modify_subscription">
        <%= form_for s, :url => change_subscription_path(s) do |f| %>
            <%= label_tag(:q, "Days to delay:") %>
            <%= text_field_tag(:query) %>
            <%= check_box_tag(:always) %>
            <%= label_tag(:always, "Apply delay to all future orders") %>
            <%= submit_tag("Change") %>
        <% end %>
        <%= link_to 'Destroy', s, :confirm => 'Are you sure?', :method => :delete %>
    </div>
  </div>
<% end %>

几天之内。
更改订阅路径do | f |%>
“你确定吗?”,:method=>:delete%>
产生

<div class="subscription_listing">
    <a href="#" onclick="toggle_delay(this); return false;">Pasta</a>
    in 57 days.
    <div class="modify_subscription">
        <form accept-charset="UTF-8" action="/subscriptions/7/change" class="edit_subscription" id="edit_subscription_7" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="_method" type="hidden" value="put" /><input name="authenticity_token" type="hidden" value="s5LJffuzmbEMkSrez8b3KLVmDWN/PGmDryXhp25+qc4=" /></div>

            <label for="q">Days to delay:</label>
            <input id="query" name="query" type="text" />
            <input id="always" name="always" type="checkbox" value="1" />
            <label for="always">Apply delay to all future orders</label>
            <input name="commit" type="submit" value="Change" />
</form>     <a href="/subscriptions/7" data-confirm="Are you sure?" data-method="delete" rel="nofollow">Destroy</a>
    </div>

  </div>
  <div class="subscription_listing">
    <a href="#" onclick="toggle_delay(this); return false;">Gummy Bears</a>
    in 57 days.
    <div class="modify_subscription">
        <form accept-charset="UTF-8" action="/subscriptions/8/change" class="edit_subscription" id="edit_subscription_8" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="_method" type="hidden" value="put" /><input name="authenticity_token" type="hidden" value="s5LJffuzmbEMkSrez8b3KLVmDWN/PGmDryXhp25+qc4=" /></div>
            <label for="q">Days to delay:</label>
            <input id="query" name="query" type="text" />

            <input id="always" name="always" type="checkbox" value="1" />
            <label for="always">Apply delay to all future orders</label>
            <input name="commit" type="submit" value="Change" />
</form>     <a href="/subscriptions/8" data-confirm="Are you sure?" data-method="delete" rel="nofollow">Destroy</a>
    </div>
  </div>

57天后。
延迟天数:
将延迟应用于所有未来订单
57天后。
延迟天数:
将延迟应用于所有未来订单

这是一个问题,因为现在无论哪一个“将延迟应用于所有未来订单”,我选择它总是非常有帮助地为我选中第一个框。我怎样才能在不做一些丑陋和不符合轨道的事情的情况下覆盖ID?

您应该能够通过将ID作为选项传入来覆盖它

text_field_tag(:query, '', :id=>'unique id')
check_box_tag(:always, '1', false, :id=>'unique_id')
比如说

<% current_user.subscriptions.each_with_index do |s,i| %>
  <div class="subscription_listing">
    <%= link_to_function s.product.name, "toggle_delay(this)"%>
    in <%= s.calc_time_to_next_arrival %> days.
    <div class="modify_subscription">
        <%= form_for s, :url => change_subscription_path(s) do |f| %>
            <%= label_tag("query_#{i}", "Days to delay:") %>
            <%= text_field_tag(:query, '', :id=>"query_#{i}") %>
            <%= check_box_tag(:always, '1', false, :id=>"always_#{i}") %>
            <%= label_tag("always_#{i}", "Apply delay to all future orders") %>
            <%= submit_tag("Change") %>
        <% end %>
        <%= link_to 'Destroy', s, :confirm => 'Are you sure?', :method => :delete %>
    </div>
  </div>
<% end %>

几天之内。
更改订阅路径do | f |%>
“查询{i}”)%>
“始终”{i}“%>
“你确定吗?”,:method=>:delete%>

您应该能够通过将id作为选项传入来覆盖该id

text_field_tag(:query, '', :id=>'unique id')
check_box_tag(:always, '1', false, :id=>'unique_id')
比如说

<% current_user.subscriptions.each_with_index do |s,i| %>
  <div class="subscription_listing">
    <%= link_to_function s.product.name, "toggle_delay(this)"%>
    in <%= s.calc_time_to_next_arrival %> days.
    <div class="modify_subscription">
        <%= form_for s, :url => change_subscription_path(s) do |f| %>
            <%= label_tag("query_#{i}", "Days to delay:") %>
            <%= text_field_tag(:query, '', :id=>"query_#{i}") %>
            <%= check_box_tag(:always, '1', false, :id=>"always_#{i}") %>
            <%= label_tag("always_#{i}", "Apply delay to all future orders") %>
            <%= submit_tag("Change") %>
        <% end %>
        <%= link_to 'Destroy', s, :confirm => 'Are you sure?', :method => :delete %>
    </div>
  </div>
<% end %>

几天之内。
更改订阅路径do | f |%>
“查询{i}”)%>
“始终”{i}“%>
“你确定吗?”,:method=>:delete%>