3

Rails ビューでフォームを設定して、コントローラーの show メソッドに ID を送信しようとしています。私のフォームは、オートコンプリートを使用して非表示の id フィールドを設定します。

<%= form_tag students_path, id: 'search_student_name', method: :get do %>
  <%= text_field_tag :search_name, '', size: 30 %>
  <%= hidden_field_tag :id %>
  <%= submit_tag "Search", name: nil %>
<% end %>

scaffold によって生成された標準コントローラーの 'show' メソッドを使用しています。

# GET /students/1
# GET /students/1.json
def show
  @student = student_scope.find(params[:id])

  respond_to do |format|
    format.html # show.html.erb
    format.json { render json: @student }
  end
end

これを機能させるためのフォーム URL / 投稿方法 / 追加ルートの組み合わせに関するアドバイスをいただければ幸いです。これは、Rails で行う通常の方法ですか、それとも、送信されたフォームを処理する新しいコントローラー メソッドを設定する必要がありますか?

前もって感謝します

4

1 に答える 1

3

これは厳密には Restful ショーではないため、新しいアクションである検索を作成する必要があります。

#routes.rb
post 'search' => 'students#search'

#student_controller.rb
def search
   @student = Student.find_by_name params[:search_name]
   render action: 'show'
end

私が知る限り、フォームは :id を送信する必要はありません。

<%= form_tag search_path, method: :get do %>
  <%= input_tag :search_name, type: 'text' %>
  <%= submit_tag "Search" %>
<% end %>
于 2013-03-17T10:40:29.923 に答える