Ruby on Rails 中的自定义搜索



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

我有3张桌子User CompanyCompanyUser

我申报的关系如下

class CompanyUser < ActiveRecord::Base
  belongs_to :company
  belongs_to :user
...
end

在公司.rb

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

在用户.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

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

这是执行搜索筛选的方法。

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

现在,只有当我在该搜索字段中键入正确的 CompanyUser 表id时,我才能获得结果。我正在尝试做的是使用用户表和公司表中的字段进行搜索。例如,来自用户的email和来自公司的name

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

@company_users = CompanyUser.all
@copany_users.all(:conditions => ["company_id LIKE ? OR company.email like ? OR user.name LIKE ?","%#{params[:search_data]}%","%#{params[:search_data]}%", "%#{params[:search_data]}%" ])

def self.filter_company_users(search_data)
where("company_id LIKE ? OR company.email like ? OR user.name LIKE ?" ,"%#{search_data}%", "%#{search_data}%","%#{search_data}%")
end

相关内容

  • 没有找到相关文章

最新更新