我正在学习rails并且正在玩一个简单的网络应用程序,该应用程序与flickr集成以根据用户给定的条件搜索照片并将查询存储在搜索历史记录表中。
我正在寻求最佳或“轨道”处理方式。我应该设置一个控制器和非资源路由来处理搜索并将数据存储在自定义表中;或者我应该为具有资源路径和附加搜索路径的查询创建资源吗?
答案 0 :(得分:7)
Lemme refactor:
rails g controller searches
这个简洁的规则允许您使用漂亮的每资源操作搜索控制器:
# config/routes.rb
get 'search/:action' => 'searches#:action'
以下是此类的简化版本:
class SearchesController < ApplicationController
def foos
search do
Foo.where :name => params[:q]
end
end
def bars
search do
Bar.where :title => params[:q]
end
end
private
def search(&block)
if params[:q]
@results = yield if block_given?
respond_to do |format|
format.html # resources.html.erb
format.json { render json: @results }
end
else
redirect_to root_url, :notice => 'No search query was specified.'
end
end
end
网址查询示例:
/search/foos?q=baz
/search/bars?q=baz
答案 1 :(得分:4)
我的想法:
在config / routes.rb中:
match '/search/:query' => 'search#search', :as => 'search'
创建SearchController
:
rails generate controller search
在app / controllers / search_controller.rb中:
class SearchController < ApplicationController
def search
# Use params[:query] to perform the search
end
end
例如,对“apples”的查询将显示为:http://example.com/search/apples
您可以使用以下代码生成查询链接:search_path('apples')