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

return · 发布于 2017年06月02日 · 最后由 yingce 回复于 2017年06月02日 · 301 次阅读
036fd5

如:projects表有字段name, language

language = params[:language]

我查询的时候

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

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

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

而不是

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

这该怎么写

共收到 7 条回复
036fd5

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

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

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

7809
036fd5return 回复
projects = Project.where(:name => "test")
projects = projects.where(:language => language) if language.present?
24293
#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])
27349
projects =  language.nil Project.where(:name => "test") : 
                    Project.where(:name => "test", :language => "#{language}")
19106
q = {name: params[:name], language: params[:language]}.compact
Project.where(q)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册