Rails Ruby 中的自定义搜索
Custom Search in Ruby on Rails
我正在尝试在我的 Rails 应用中实现自定义搜索功能。
我有 3 tables User
Company
和 CompanyUser
我声明的关系如下
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 table 的公司
现在我有一个搜索字段,我可以在其中输入一个名称来过滤这个公司用户列表。
我正在从我的 CompanyUsers table 调用一个方法来像这样过滤搜索结果
@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
现在,只有在该搜索字段中输入正确的 id
CompanyUser table,我才能得到结果。我想要做的是使用来自用户 table 和公司 Table 的字段进行搜索。例如,来自用户的 email
和来自公司的 name
。
@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
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
table 与公司和用户一起加入,因此您也可以在 table 上应用过滤器.
where 条件重复使用相同的查询字符串并将 OR
中的搜索应用于您要搜索的所有列。
我正在尝试在我的 Rails 应用中实现自定义搜索功能。
我有 3 tables User
Company
和 CompanyUser
我声明的关系如下
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 table 的公司 现在我有一个搜索字段,我可以在其中输入一个名称来过滤这个公司用户列表。
我正在从我的 CompanyUsers table 调用一个方法来像这样过滤搜索结果
@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
现在,只有在该搜索字段中输入正确的 id
CompanyUser table,我才能得到结果。我想要做的是使用来自用户 table 和公司 Table 的字段进行搜索。例如,来自用户的 email
和来自公司的 name
。
@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
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
table 与公司和用户一起加入,因此您也可以在 table 上应用过滤器.
where 条件重复使用相同的查询字符串并将 OR
中的搜索应用于您要搜索的所有列。