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

return · June 02, 2017 · Last by yingce replied at June 02, 2017 · 1452 hits

如: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 还可以这样啊,学习了,牛逼👍

Reply to 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)
You need to Sign in before reply, if you don't have an account, please Sign up first.