我正在编写一个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
到目前为止,最常见的用户模式是输入产生单个产品的搜索。发生这种情况时,我希望网址重定向到宁静的
http://myurl/list/:id
而不是
http://myurl/query?q=search-query.
但是在上面的代码中,我两次访问数据库以获得相同的记录,并为每个查询创建2个http请求/响应。不是世界末日,但我想知道是否有更好的方法。 (当我运行查询时,我已经掌握了模型对象)
是否有一种干净的方式从查询操作呈现列表操作的视图,并告诉浏览器没有额外请求/响应的新URL?
答案 0 :(得分:1)
不在http协议的约束范围内。