在另一个表格栏

时间:2016-05-05 09:36:11

标签: javascript ruby-on-rails ruby forms ruby-on-rails-4

首先我要说的是我是网络开发的初学者,所以请留意我! 问题是我有一个页面,其中rails将收集数据库中的所有房间。然后将它们列在表格中。到现在为止还挺好。但我希望用户能够单击每行旁边的按钮,这将为用户预订房间。

Atm我的工作率为80%。问题是我在另一个表单中有一个表单,所以当用户按下书时,它会预订表格中的最后一行!那么我该如何解决这个问题呢?我读到了使用javascript来解决这个问题,但作为初学者,我真的不懂javascript。

我可以将Reservation.new表单放在all_rooms表单中,它会起作用。但我还需要从用户那里获取datetimepicker的值。这就是为什么我把它放在外面。

<%= form_for(Reservation.new, remote: true, format: :js, url: {controller: "booker", action: "create"}) do |new_res| %>
  <div class="calender">
    <%= new_res.date_field :date, :value => (Time.now + 6.days).strftime('%Y-%m-%d') ,  min: 6.days.from_now, max: 90.days.from_now %>
  </div>
  <div class="time">
    <%= new_res.time_select :start_time , {:default => {:hour => 10 , :minute => 00}, minute_step: 15 , :start_hour => 8, :end_hour => 18, :hour => 11} %>
    <%= new_res.time_select :end_time , {:default => {:hour => 14 , :minute => 00}, minute_step: 15 , :start_hour => 8, :end_hour => 18, :hour => 11} %>
  </div>

</div>
<div class="t_Data">
  <table class ="rooms_to_book">
    <tr>
      <th>Namn</th>
      <th>Storlek</th>
      <th>Byggnad</th>
      <th>Utrustning</th>
      <th>Booka</th>
    </tr>
    <% @all_rooms.each do |r| %>
      <tr>
        <td><%= r.room %></td>
        <td><%= r.room_size %></td>
        <td><%= r.building %></td>
        <td><%= r.room_description %></td>
        <td>
          <%= new_res.hidden_field :room, value: r.room %>
          <%= new_res.hidden_field :building, value: r.building %>
          <%= new_res.hidden_field :room_size, value: r.room_size %>
          <%= new_res.hidden_field :room_description, value: r.room_description %>
          <%= new_res.submit  "Book" %>
        </td>
      </tr>
    <% end %>
  </table>
</div>
<% end %>

所以问题是。我如何解决这个问题,所以当我按书时。我创建了一个新的预订并收集了所有数据+用户选择的日期。所以它对每一行都是独一无二的。

1 个答案:

答案 0 :(得分:0)

您可以将每个提交按钮命名为

,而不是所有隐藏字段
  

<%= new_res.submit "Book", name: r.id %>

然后在你的控制器中的你的创建动作中从params散列中提取房间id,因为它将是指向“Book”的params散列中的一个键。然后使用id,您可以找到关联的Room对象,并使用隐藏字段中的所有内容创建一个新的预留。