新手问题 Where 两个字段查询问题

return · 2017年06月02日 · 最后由 yingce 回复于 2017年06月02日 · 1406 次阅读

如:projects 表有字段 name, language

language = params[:language]

我查询的时候

Project.where(:name => "test", :language => "#{language}")

如果这个时候 language 为 nil,那么我只想得到结果

Project.where(:name => "test")

而不是

Project.where(:name => "test", :language =>nil)

这该怎么写

@lyfi2003 @huacnlee @hooopo 麻烦大神们帮看看😂

q = {name: params[:name], language: params[:language]}
q = params.reject{|k, v| v.blank?}
Project.where(q)

@easonlovewan 还可以这样啊,学习了,牛逼👍

return 回复
projects = Project.where(:name => "test")
projects = projects.where(:language => language) if language.present?
#model
scope :by_name, ->(name) { where(name: name) }
scope :by_language, ->(language) { where(language: language) if language.present? }

#controller
projects = Project.by_name("test").by_language(params[:language])
projects =  language.nil Project.where(:name => "test") : 
                    Project.where(:name => "test", :language => "#{language}")
q = {name: params[:name], language: params[:language]}.compact
Project.where(q)
需要 登录 后方可回复, 如果你还没有账号请 注册新账号