Rails基于已检查的记录创建新记录

时间:2013-10-21 19:38:01

标签: ruby-on-rails

我有一个表格,显示与events相关的时间条目(workorder)。 用户可以在任何表行上输入检查。 对于每个选中的行,我想在invtime表中创建一个新记录。

invtime belongs_to :event

event has_many :invtimes

这是表格:

  <table>
  <thead>
  <tr>
    <th>Title</th>
    <th>Employee</th>
    <th>Date</th>
    <th>Hours</th>
    <th>Actions</th>
  </tr>
  </thead>
  <tbody>
  <% Event.where("workorder_id = ?", Invoice.find(@invoice).workorder_id).where("billed = ?", false).each do |event| %>
  <tr>
    <td><%= check_box_tag(:add_record) %></td>
      <td><%= event.title %></td>
      <td><%= event.employee.employee_full_name %></td>
      <td><%= event.starts_at.strftime("%m/%d/%Y") %></td>
      <td><%= event.hours %></td>
      <td></td>
  </tr>
  <% end %>
  </tbody>
</table>

我不确定如何在选中复选框的情况下处理返回的页面。 我应该使用Javascript(coffeescript)吗?或者我可以用Ruby做到吗?

1 个答案:

答案 0 :(得分:1)

这应该这样做:

<tbody>
  <%= form_tag(your_path_helper) do %>
    <% Event.where("workorder_id = ?", Invoice.find(@invoice).workorder_id).where("billed = ?", false).each do |event| %>
      <tr>
        <td><%= check_box_tag 'event_ids_to_save[]', value: event.id, checked: Invtime.exists?(event_id: event.id) %></td>
        <td><%= event.title %></td>
        <td><%= event.employee.employee_full_name %></td>
        <td><%= event.starts_at.strftime("%m/%d/%Y") %></td>
        <td><%= event.hours %></td>
        <td></td>
      </tr>
    <% end %>
    <tr><td colspan='6'><%= submit_tag %></td></tr>
  <% end %>
</tbody>

控制器响应form_tag提交的相应操作:

def action_of_the_form_tag
  params[:event_ids_to_save].each do |event_id|
    event = Event.where(id: event_id)
    # do your logic here
  end
end