2013-03-17 47 views
3

我想在Rails視圖中設置一個窗體,以提交一個id回到控制器中的show方法。我的表單使用自動完成設置隱藏id字段:Rails搜索表單提交以顯示方法

<%= 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的方式,還是我應該設置一個新的控制器方法來處理提交的表單?

在此先感謝

+0

你能解釋它是如何使用自動填充來填充你的用戶ID的? – Zippie 2013-03-17 11:14:15

+0

@Zippie我正在更新隱藏的領域與JavaScript選擇項目。 (「#search_student_name #search_name」)。自動完成 minLength:3, 來源:「/ students/id「)。val ui.item.value #更新文本框中顯示的內容 @value = ui.item.label $('#search_student_name')。submit() false' – 2013-03-23 10:19:08

回答

2

因爲它不完全是一個寧靜的節目,你應該創建一個新的動作,搜索。

#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 %> 
+1

謝謝@cmaitchison,這就是現在工作。我正在使用:id,因爲名稱實際上是first_name和last_name,並且我可以使用自動完成填充:id字段。我認爲這將簡化搜索查詢,並只返回一個值(如果名稱重複)。再次感謝。 – 2013-03-17 11:55:16

+0

沒問題。樂意效勞。你知不知道你可以將每個問題的答案標記爲[accepted](http://meta.stackexchange.com/q/5234)? – 2013-03-17 12:38:30

+0

in rails3:'post'search',:to =>'studnets#search'' – tokhi 2014-02-20 09:33:42