按钮事件触发器

时间:2013-06-14 16:12:24

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

我无法理解在使用Ruby on Rails时如何触发特定的按钮事件。例如,我在表中有一个迷你表单(MVC的View侧):

<%= 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 %>

如何告诉控制器在视图中单击“更新”按钮时,例如执行此代码:

a = Student.find(3)

a.room_number = '2105'
a.save

2 个答案:

答案 0 :(得分:2)

您的按钮应该触发回发到服务器。您需要在控制器中定义一个操作,一个到达该操作的路径,并将表单action属性设置为该路由。然后,您的操作可以更新模型并以成功或错误消息进行响应。

答案 1 :(得分:2)

您应该在表单标记中指定一个路由(要将数据提交到的控制器操作)。有关详细信息,请参阅http://apidock.com/rails/ActionView/Helpers/FormTagHelper/form_tag。考虑到你的行动是来自学生控制器的“编辑”动作,并且数据要发布到“更新”,视图可以定义为

<%= form_tag student_path(@student), :method => :put do %>
  ...
  <$= submit_tag 'Update' %>

并且在'update'方法中,您可以编写代码以使用收到的参数更新学生。我认为你需要学习基本的轨道功能,因为它将节省你的时间。你可以参考http://guides.rubyonrails.org/getting_started.html另外,更喜欢使用form_for而不是form_tag。