0

我有一个查询要在我的 Rails 应用程序(使用 Postgres 数据库)中按他们的名字搜索特定类别的用户(律师),就像这样

 @users = User.where(:lawyer => 'true').text_search(params[:query])

这是 User.rb 类的方法

def self.text_search(query)
  if query.present?
    where("name @@ :q", q: query)
  else
    scoped
  end
end

我不想在控制器中使用where.(:lawyer => 'true'),而是想(即使它不影响查询)将该条件放在 User.rb 类的方法中,如下所示

 @users = User.text_search(params[:query])

def self.text_search(query)
  if query.present?
    where("name @@ :q", q: query, :lawyer => 'true')
  else
    scoped
  end
end

但是,现在搜索不起作用(或者只是通过名称查询进行搜索)

我将如何在 text_search 方法中添加那个律师 == true 条件。

4

1 回答 1

2

我会使用范围:

class User < ActiveRecord::Base
  scope :lawyers, :conditions => { :is_lawyer => true }
end

然后在控制器中:

 @users = User.lawyers.text_search(params[:query])

您可以全力以赴并在用户模型上定义一个类方法:

def self.lawyers_named(name)
  lawyers.text_search(name)
end

然后调用它:

@users = User.lawyers_named(params[:query])
于 2013-06-08T04:29:58.003 回答