如何在Rails Form帮助方法中覆盖默认id值?

时间:2013-06-17 14:54:43

标签: ruby-on-rails ruby-on-rails-3

所以,我正在使用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)发送错误报告(这是我获得此代码的地方)。

1 个答案:

答案 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 %>