13

我正在尝试在我的 rails 应用程序中构建搜索结果页面(仍然是菜鸟),但我不知道如何以 rails 方式构建查询。

例如,如果没有参数,我想返回所有结果。如果用户在搜索表单中传递 1 到 n 个可选参数,我想将它们添加到查询中。

接下来,如果他们有指定的“价格 desc”或“year_built desc”甚至两者的组合。

最后使用 will_paginate 分隔结果

# default to all listings
@listings = Mls.all

@listings.where("listing_price > ?", params[:listing_price]) unless params[:listing_price].blank?
# ... bunch of other search options ...
@listings.where("property_type = ?", params[:property_type]) unless params[:property_type].blank?

# order
@listings.order("some order by param") if some sort param
@listings.order("some order by param") if some other sort param

# paginate results
@listings.paginate(:page => params[:page])

有没有这样做的“Rails”方式?

4

2 回答 2

29

你看过高级搜索的(修订的)Railscasts 集吗?这是链接:http ://railscasts.com/episodes/111-advanced-search-form-revised

基本思想是创建一个Search资源,该资源将处理通过表单发送的搜索参数,并在后台搜索相关模型(在您的情况下Mls

这样,params[:listing_price]您可以处理搜索模型(models/search.rb)中的条件,而不是检查控制器是否存在某些参数(例如):

def find_listings
  listings = Mls.order(:name)
  listings = listings.where("listing_price > ?", listing_price) if listing_price.present?
  # ... more condition checking
  listings
end
于 2013-01-05T20:56:35.780 回答
1

几个链接:

使用第三方 gem(元搜索)

从头开始编写代码

于 2013-01-05T20:40:33.793 回答