单击按钮更新表字段

时间:2013-06-13 12:36:50

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

每次在该行中单击按钮时,我都会尝试使用该行中下拉框中的数据更新表格中的单元格。每行都有一个下拉框和一个按钮,如下图所示:

http://i.imgur.com/eVJumuk.png

我正在尝试进行设置,以便当用户从下拉框中选择一个值并单击更新按钮时,它将仅为该行更新Room列的值。但我无法弄清楚如何使按钮工作,并想知道是否有人可以帮助我。

这是我的控制器:

def index
@students = Student.all
@first_floor = %w(1101 1102 1103 1104 1105)
@second_floor = %w(2101 2102 2103 2104)
@third_floor = %w(3101 3102 3103 3104)

@selected_room = params[:room]

respond_to do |format|
  format.html # index.html.erb
  format.json { render json: @students }
end
end

以下是该表视图的一部分:

<% @students.each do |student|%>
<tr>
<td><%= student.id %></td>
<td><%= student.n_number %></td>
<td><%= student.f_name %></td>
<td><%= student.l_name %></td>
<td><%= student.date_submit %></td>
<td><%= student.floor_pref %></td>
<td><%= @selected_room %></td>
<% form_tag do %>
<% if student.floor_pref == '1st' %>
    <td><%= select_tag 'room', options_for_select(@first_floor.map { |value| [value,value]}, @selected_room) %></td>
<% end %>
<% if student.floor_pref == '2nd' %>
    <td><%= select_tag 'room', options_for_select(@second_floor.map { |value| [value,value]}, @selected_room) %></td>
<% end %>
<% if student.floor_pref == '3rd' %>
    <td><%= select_tag 'room', options_for_select(@third_floor.map { |value| [value,value]}, @selected_room) %></td>
<% end %>
<td><%= submit_tag 'Update' %></td>
<% end %>
<td><%= button_to 'Show', :controller => 'students', :action => 'preview', :id => student%></td>
<td><%= button_to 'Remove', student, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>

1 个答案:

答案 0 :(得分:1)

button_tag在您的页面上创建一个表单。您现在遇到的问题是select_tag下拉列表不是该表单的一部分。你可能想要做的是明确地创建表单并将下拉列表放在其中。用这样的东西替换你的最后2个td:

<%= form_tag do %>
  <% if student.floor_pref == '1st' %>
      <td><%= select_tag 'room', options_for_select(@first_floor.map { |value| [value,value]}, @selected_room) %></td>
  <% end %>
  <% if student.floor_pref == '2nd' %>
      <td><%= select_tag 'room', options_for_select(@second_floor.map { |value| [value,value]}, @selected_room) %></td>
  <% end %>
  <% if student.floor_pref == '3rd' %>
      <td><%= select_tag 'room', options_for_select(@third_floor.map { |value| [value,value]}, @selected_room) %></td>
  <% end %>
  <td><%= submit_tag 'Update' %></td>
<% end %>