Ruby on rails 如何使用rails activerecord编写带有3个条件的查询
我正在创建以下ruby on rails 3查询: User.rbRuby on rails 如何使用rails activerecord编写带有3个条件的查询,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我正在创建以下ruby on rails 3查询: User.rb search_results = self.find( :all, :select => 'id,fb_id,fname,lname,org_id', :conditions => ["guest = ? AND fb_id != ? AND trim(lower(fname)) || ' ' || trim(lower(lname))
search_results = self.find( :all,
:select => 'id,fb_id,fname,lname,org_id',
:conditions => ["guest = ? AND fb_id != ? AND trim(lower(fname)) || ' ' || trim(lower(lname)) LIKE ?", false, nil, '%'+"#{q.downcase}"+'%'],
:limit => 8
)
条件是:
这是一无所获。我猜我把1搞糟了。对于条件有什么问题或处理此查询的更好方法有什么建议吗?谢谢检查日志以查看对数据库的确切查询。确保数据库中确实存在您认为存在的记录 如果请求是
用户需要是guest==false或具有非空的fb_id
,则查询应该是
q2 = "%#{q.downcase}%"
search_results = self.find( :all,
:select => 'id,fb_id,fname,lname,org_id',
:conditions =>
["(guest = ? OR fb_id is not null) AND (
trim(lower(fname)) LIKE ? OR
trim(lower(lname)) LIKE ?)",
false, q2, q2],
:limit => 8
)
编辑我在空测试中遗漏了not。我还改进了q2的设置。我遵循了mu关于处理dbms特定假常量的建议。我将其分为三个命名范围,例如(在模型中): (不需要那些带有导轨等的“%”) 然后,您可以在
User.guest(guest\u id).fb(fb\u id).name\u check(:username)
或者像在
User.name\u check中那样单独使用
然后你可以随意混合搭配,找出哪些有效,哪些无效
scope :guest = self.find_by_guest(id)
scope :fb = self.find_by_fb_id(fb_id)
scope :name_check = self.find("trim(lower(fname)) || ' ' || trim(lower(lname)) LIKE ?", q.downcase)