mysql – Ruby on Rails中的自定义搜索

我正在尝试在我的Rails应用程序中实现自定义搜索功能.

我有3个表用户公司和公司用户

我宣布的关系如下

class CompanyUser < ActiveRecord::Base

  belongs_to :company
  belongs_to :user
...
end

在Company.rb

has_many :company_users, dependent: :destroy
has_many :users, through: :company_users

在User.rb中

has_many :company_users, dependent: :destroy
has_many :companies, through: :company_users

在我的视图页面中,我列出了所有使用company_users表的公司
现在我有一个搜索字段,我可以在其中键入一个名称,用于过滤此公司用户列表.

我正在调用我的CompanyUsers表中的方法来过滤搜索结果

@company_users = CompanyUser.all
if params[:search_data].present?
  @company_users = @company_users.filter_company_users(params[:search_data])
end

其中,当在搜索字段中输入搜索数据时,将params [:search_data]传递给相同的方法.

这是进行搜索过滤的方法.

 def self.filter_company_users(search_data)
    where('company_id like (?)', "%#{search_data}%")
 end

现在,只有在该搜索字段中输入正确的CompanyUser表ID,才能得到结果.我要做的是使用User表和Company Table中的字段进行搜索.例如来自用户的电子邮件和来自公司的名称.

解决方法:

class CompanyUser
  def self.search(search_data)
    search = self.joins(:company, :user)
    search.where!('company_users.company_id LIKE :query OR users.email LIKE :query OR companies.name LIKE :query', query: "%#{search_data}%")
    search
  end
end

使用join语句,您可以将CompanyUser表与公司和用户一起加入,因此您也可以在该表上应用过滤器.

where条件重用相同的查询字符串,并将OR中的搜索应用于要搜索的所有列.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...