我正在编写一个 Rails 应用程序,其中有两种方法,一个“列表”和一个“查询”。这是一个简化版本:
class ApplicationController < ActionController::Base
def query
# query based on user-form text in params[:q]
@list = Product.where(Product.arel_table[:description].matches("%#{params[:q]}%"))
if @list.count == 1
redirect_to :action => 'list', :id => @list[0].id
end
end
def list
@item= Product.find(params[:id])
end
end
到目前为止,最常见的用户模式是输入产生单一产品的搜索。发生这种情况时,我希望 url 重定向到 restful
http://myurl/list/:id
而不是
http://myurl/query?q=search-query.
但在上面的代码中,我两次访问数据库以获得相同的记录,并为每个查询创建 2 个 http 请求/响应。不是世界末日,但我想知道是否有更好的方法。(当我运行查询时,我已经有了模型对象)
是否有一种干净的方法可以从查询操作中呈现列表操作的视图并告诉浏览器新的 URL 而无需额外的请求/响应?