我有考试控制器。
在routes.rb中有“资源:考试”
在控制器中有类似REST的生成方法。
我想在那里添加自己的方法:
def search
@exams = Exam.where("name like ?", params[:q])
end
在视图文件中:
<%= form_tag(search_path, :method => "post") do %>
<%= label_tag(:q, "Szukaj: ") %>
<%= text_field_tag(:q) %>
<%= submit_tag("Szukaj") %>
<% end %>
我知道,目前还没有结果显示,此时它根本不起作用(:
当我转到http://localhost:3000/exams/search时,它将其映射到显示控制器,搜索是:id参数然后......
如何让http://localhost:3000/exams/search运行搜索控制器?
答案 0 :(得分:3)
你忘记添加路线了。在routes.rb
resources :exams
中
map.search '/exams/search', :controller => :exams, :action => :search
注意,resources :exams
不会为控制器的所有公共方法生成路由,它会生成非常具体的路由集。您可以在rails routing guide中找到更多信息。 (特别参见第3.2节)
答案 1 :(得分:2)
您需要在映射中添加其他参数。你可以像这样添加“集合”方法:
map.resources :exams, :collection => {:search => :get}
当你rake routes
时,你会发现它产生了类似的东西:
search_exams GET /exams/search(.:format) {:controller=>"exams", :action=>"search"}
exams GET /exams(.:format) {:controller=>"exams", :action=>"index"}
POST /exams(.:format) {:controller=>"exams", :action=>"create"}
new_exam GET /exams/new(.:format) {:controller=>"exams", :action=>"new"}
edit_exam GET /exams/:id/edit(.:format) {:controller=>"exams", :action=>"edit"}
exam GET /exams/:id(.:format) {:controller=>"exams", :action=>"show"}
PUT /exams/:id(.:format) {:controller=>"exams", :action=>"update"}
DELETE /exams/:id(.:format) {:controller=>"exams", :action=>"destroy"}