所以,我正在使用Rails和Ajax创建一个todo列表应用程序。我的“lists / show.html.erb”文件中有每个todo任务的表单。以下是一些代码:
<h3>Unfinished Tasks</h3>
<div class="tasks" id="incomplete_tasks">
<% @list.tasks.incomplete.each do |task| %>
<%= form_for [current_user, @list, task], remote: true do |f| %>
<%= f.label :completed, class: 'checkbox' do %>
<%= f.check_box :completed %>
<%= task.description %>
<% end %>
<%= f.submit "Update" %> <!--We hide this button in jquery-->
<% end %>
<% end %>
</div>
这个问题是在同一页面中创建了多个表单并且具有相同id的输入复选框,即所有表单中的输入字段(复选框)具有由Rails自动创建的相同输入ID。这使得标签标签无用,因为我们在for属性中需要一个唯一的id。
<label for="">
那么,有没有办法通过添加前缀来更改默认ID创建,以便每个表单的输入标记是唯一的?由于这是一个非常常见的问题,是否有“Rails方式”来解决这个“标签”问题?
P.S:这是对此http://goo.gl/bB9D6
的后续问题在旁注中,如何向Railscasts(Ryan Bates)发送错误报告(这是我获得此代码的地方)。
答案 0 :(得分:1)
好的,这很简单。我刚刚使用了以下代码:
<%= form_for [current_user, @list, task], remote: true do |f| %>
<%= f.label 'completed_'+task.object_id.to_s, class: 'checkbox' do %>
<%= f.check_box :completed ,id:'task_completed_'+task.object_id.to_s%> <!--have overridden default id because label works only if there is a unique id in each page-->
<%= task.description %>
<% end %>
<%= f.submit "Update" %> <!--We hide this button in jquery-->
<% end %>
<% end %>