3

我正在尝试在 Rails 视图中设置一个表单,以将一个 id 提交回控制器中的 show 方法。我的表单使用自动完成来设置隐藏的 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 %>

我正在使用脚手架生成的标准控制器“显示”方法:

# 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/post 方法/其他路由组合的任何建议,以使其正常工作。这是您通常使用 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 回答