我有一个匹配模型。匹配是授权和项目之间的关联。在匹配索引上,我有一个所有授权名称列表以及与之关联的项目。
我在匹配索引中添加了一个搜索栏,我可以通过这样做搜索项目表中的任何字段:
def self.search(search)
if search
joins(:project)
.merge(Project.where('project_name iLIKE ?', "%#{search}%"))
else
all
end
end
项目模型中的一个字段是user_id。我最终想做的是通过项目用户的名称搜索匹配索引。
我有两个关于如何解决这个问题的想法:
调整搜索方法,以便我可以将用户加入项目,然后将项目加入匹配,以便我可以按用户名进行搜索。
我在匹配模型中定义了用户,如下所示。
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
答案 0 :(得分:0)
由于Match#user
是普通方法,因此ActiveRecord不知道如何将其转换为SQL。因此,您应该使用Idea One:加入您的users
表,然后搜索其列。