所以,我有搜索表单,显然可以从任何页面进行搜索。 我认为有意义的是,应用程序控制器中的此类操作放在layouts / views文件夹中。 但我只是不明白--Rails没有看到它。所以我不能这样做?那么我应该如何在任何页面上提供行动呢? 代码:
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 :(得分:1)
我建议使用其他控制器来执行此操作。即使只有一种方法,它也可以是SearchController
。
请注意,ApplicationController
是控制器,应用程序中的每个其他控制器都默认继承。因此,如果情况不是这样,它可能有意义,但现在每个控制器都将继承您的test_search
动作,这是不可取的。
如果您的搜索表单是部分的,那么这是在ApplicationController
还是在任何其他控制器中没有区别。你只需要指向正确的路线。
答案 1 :(得分:1)
最初你必须解释自己的流程。你需要的是在所有页面上呈现的部分部分,如果用户向其添加一些输入并提交,他会得到一些输出。对?好。所以你首先要在
中创建一个新的部分app/views/shared/_search.html.erb
然后,在routes.rb中创建路由以指向控制器的操作。您不必将它放在application_controller中。而是创建search_controller.rb并创建一些响应表单提交的操作。
每当您想要在其他网页上呈现搜索表单时,只需使用类似
的内容调用render partial(more on that here)<%= render "shared/search" %>
如果你创建了上面的文件,这很好。确保您的操作存在且名称正确,在您的情况下应该是:
def test_search
...
end
祝你好运。
答案 2 :(得分: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
来处理搜索请求。