【发布时间】:2017-02-03 03:04:03
【问题描述】:
我正在开发一个应用程序。我试图植入一个搜索系统。方法很简单。在家里,我在 3 列“名称”或“nomdep”或“nomregion”上搜索查询。在此之后,我想使用 AND 运算符按参数进行过滤。
如果我只使用一列(例如“NAME”)植入搜索,我可以应用过滤器。但是,如果我想用一个以上的 OR 植入它,我就不能应用过滤器。我认为 OR 运算符是问题所在。但可以肯定的是,我不知道如何解决这个问题......
你能帮帮我吗?谢谢
露营.rb
has_many :caracteristiquetests, :foreign_key => :camping_id
has_many :situations, :foreign_key => :camping_id
def self.searchi(query, handicap, animaux, television, plage, etang, lac)
return scoped unless query.present?
left_outer_joins(:caracteristiquetests, :situations).where(['nomdep LIKE ? OR name LIKE ? OR nomregion LIKE ? AND handicap LIKE ? AND animaux LIKE ? AND television LIKE ? AND plage LIKE ? AND etang LIKE ? AND lac LIKE ?', "%#{query}%", "%#{query}%", "%#{query}%", "%#{handicap}%", "%#{animaux}%", "%#{television}%", "%#{plage}%", "%#{etang}%", "%#{lac}%"])
end
camping_controller.rb
def resultnohome
if params[:query].blank?
redirect_to action: :index and return
else
@campings = Camping.searchi(params[:query], params[:handicap], params[:animaux], params[:television], params[:plage], params[:etang], params[:lac])
end
end
性格测试.rb
belongs_to :camping
情况.rb
belongs_to :camping
编辑
我编辑了我的模型以添加“()”
露营.rb
def self.searchi(query, handicap, animaux, television, plage, etang, lac)
return scoped unless query.present?
left_outer_joins(:caracteristiquetests, :situations).where(['(nomdep LIKE ? OR name LIKE ? OR nomregion LIKE ?) AND handicap LIKE ? AND animaux LIKE ? AND television LIKE ? AND plage LIKE ? AND etang LIKE ? AND lac LIKE ?', "%#{query}%", "%#{query}%", "%#{query}%", "%#{handicap}%", "%#{animaux}%", "%#{television}%", "%#{plage}%", "%#{etang}%", "%#{lac}%"])
end
不幸的是,我得到了意想不到的结果:只显示一个结果,第一个匹配项如“短路评估”。任何想法为什么?
【问题讨论】:
标签: ruby-on-rails sqlite search conditional-statements where