我有简单的搜索(我希望保持这种方式)我可以在哪里搜索产品名称。但我想添加其他列(静态产品模型)intro_text。
到目前为止代码:
Product.rb
def self.search(search)
if search
where('intro_text LIKE ? ', "%#{search}%")
else
where('name LIKE ? ', "%#{search}%")
end
end
搜索控制器
@products_search = Product.search(params[:search]).paginate(:per_page => 5, :page => params[:page])
此时搜索发生时,结果仅显示在 intro_text 字段中。 演示: 正在搜索短语" Pez"应该找到包含此短语的所有产品以及介绍文本的所有产品都包含此短语。
还试图:
def self.search(search)
if search
where('intro_text LIKE ? ', "%#{search}%") || where('name LIKE ? ', "%#{search}%")
else
end
end
但结果是一样的! 有人可以给我一些提示吗? 我不需要任何搜索宝石。
答案 0 :(得分:1)
如果params[:search]
没有值,则else
子句变为:
where('name LIKE "%%"')
这不是很有帮助。
在您发布的第二个示例中,第一个where()
将返回ActiveRecord::Relation
,并且始终是真实的,因此||
永远不会被触发。
此外,使用与本地变量相同的名称作为方法有点令人困惑。
在我看来你想要一个组合的OR搜索?
def self.search(search_term)
if search_term.present?
where('intro_text LIKE ? OR name LIKE ?', "%#{search_term}%", "%#{search_term}%")
else
none # new in Rails 4, or you can do where('1 = 0')
# for a scope that will never return records, but can still
# chain your pagination, etc onto
end
end