Ruby on rails 如何使用rails activerecord编写带有3个条件的查询

Ruby 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))

我正在创建以下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)) LIKE ?", false, nil, '%'+"#{q.downcase}"+'%'],
                    :limit => 8
)
条件是:

  • 用户需要是guest==false或具有非null的fb_id
  • 如果1为true,则基于user.fname和user.lname进行查找

  • 这是一无所获。我猜我把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)