模型未直接关联时的SQL搜索查询

时间:2016-04-08 17:38:07

标签: sql ruby-on-rails

我有一个匹配模型。匹配是授权和项目之间的关联。在匹配索引上,我有一个所有授权名称列表以及与之关联的项目。

我在匹配索引中添加了一个搜索栏,我可以通过这样做搜索项目表中的任何字段:

 def self.search(search)
    if search
      joins(:project)
      .merge(Project.where('project_name iLIKE ?', "%#{search}%"))
    else
      all
    end
  end

项目模型中的一个字段是user_id。我最终想做的是通过项目用户的名称搜索匹配索引。

我有两个关于如何解决这个问题的想法:

Idea One

调整搜索方法,以便我可以将用户加入项目,然后将项目加入匹配,以便我可以按用户名进行搜索。

想法二

我在匹配模型中定义了用户,如下所示。

def user
 account.account_manager if account.present?
end

我在匹配索引中也有一个用户列,使用“match.user.name”调用。但是,当我尝试按下面的用户搜索时,我收到警告“在匹配时未找到名为'用户'的联盟”。有没有办法可以利用我已经定义为方法的用户?

 def self.search(search)
    if search
      joins(:user)
      .merge(User.where('name iLIKE ?', "%#{search}%"))
    else
      all
    end
  end

1 个答案:

答案 0 :(得分:0)

由于Match#user是普通方法,因此ActiveRecord不知道如何将其转换为SQL。因此,您应该使用Idea One:加入您的users表,然后搜索其列。