在HTML中ID在语意上应该是唯一的,所以应该避免ID重复。尽管ID重复也不会显示报错。
那么Rails中如何消除重复ID?可以在form中增加namespace选项,使得ID前会增加命名空间字串。
下面是一段示例代码:
<h1>Products</h1>
<div class="products">
<% @products.each do |product| %>
<div class="product">
<%= product.name %>
<%= product.description %>
<%= product.price %>
<%= form_for(@cart, target: "_blank", namespace: product.id) do |f| %>
<%= f.hidden_field :product_id, value: product.id, namespace: product.id %>
<% if current_user %>
<%= f.hidden_field :user_id, value: current_user.id, namespace: product.id %>
<% end %>
<%= f.number_field :amount, min: 1, max: 100, value: 1, required: true, namespace: product.id %>
<%= f.submit "Add to Cart", class: 'btn btn-primary' %>
<% end %>
</div>
<% end %>
</div>
这是Rails issue https://github.com/rails/rails/issues/2971