2013-05-10 109 views
0

因此,我有搜索表單,並且搜索可以從任何頁面顯然有效。 我認爲這是有道理的,從應用程序控制器這樣的行動是放置在佈局/視圖文件夾。 但我只是不明白 - Rails沒有看到它。所以我不能這樣做?那麼我應該如何提供可從任何頁面上獲得的行動? 代碼:從application_controller呈現視圖

def tests_search 
    @tests=Test.test_search(params[:query]) 

    respond_to do |format| 
    format.html 
    end 
    end 

路線:

search_tests GET /search_tests(.:format)    application#tests_search 

形式:

<%= form_tag search_tests_path, {:id=>'test_search',:method => :get} do%> 

錯誤:

Unknown action 

The action 'tests_search' could not be found for ApplicationControllerr 
+0

嘗試重新啓動您的服務器,也許 – MrYoshiji 2013-05-10 20:13:13

+0

applications_controller#tests_search =>視圖應該放在應用程序/視圖/應用/ test_search.html.erb。或者什麼是你的問題? :) – Mattherick 2013-05-10 20:17:27

回答

1

您應該創建一個新的搜索控制器。使用rails g controller search index這將創建一個搜索控制器,並執行index操作(您也可以調用類似result的操作)。然後在你的搜索視圖文件夾中添加一個search/_form.html.erb文件,用以下形式:

<%= form_tag search_path, {:id=>'test_search',:method => :get} do |f| %> 

,並在那裏你希望它是在你的layout/application.html.erb呈現此:

<%= render "search/form" %> 

這樣你就擁有一個搜索表單任何頁面,它使用SearchController來處理搜索請求。

1

我會建議使用其他控制器來做到這一點。即使只有一種方法,它也可以是例如SearchController

請注意,ApplicationController是應用程序中其他所有控制器默認繼承的控制器。所以如果不是這樣的話,這可能是有道理的,但是現在每個控制器都會繼承你的test_search動作,這是不需要的。

如果您的搜索表單將是一個部分,那麼這是否在ApplicationController或任何其他控制器中沒有區別。你只需要指向正確的路線。

1

最初你必須解釋自己的流程。你需要的是一些在所有頁面上呈現的部分,並且如果用戶向它添加一些輸入並提交,他會得到一些輸出。對?好。所以,你通過創建一個新的部分在

app/views/shared/_search.html.erb 

然後開始的地方,你在routes.rb中創建你的路線,指向一個控制器的動作。你不必把它放在application_controller中。相反,創建您的search_controller.rb並創建一些響應表單提交的操作。

每當你想渲染上的其他網頁搜索表單,您只需撥打渲染部分(more on that here)的東西,如

<%= render "shared/search" %> 

這是好事,如果你創建的文件上面。確保你的行爲存在,名稱是正確的,在你的情況下它應該是:

def test_search 
... 
end 

祝你好運。