1

Ruby on Rails を使用しているときに特定のボタン イベントをトリガーする方法がわかりません。たとえば、テーブル内にミニフォームがあります(MVCのビュー側):

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

2 に答える 2

2

ボタンは、サーバーへのポストバックをトリガーする必要があります。コントローラーでアクション、そのアクションに到達するルートを定義し、フォームaction属性をそのルートに設定する必要があります。その後、アクションでモデルを更新し、成功またはエラー メッセージで応答できます。

于 2013-06-14T16:14:36.410 に答える
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_tag よりも form_for を使用することをお勧めします。

于 2013-06-18T16:20:57.860 に答える