Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql RubyonRails中的自定义搜索_Mysql_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Mysql RubyonRails中的自定义搜索

Mysql RubyonRails中的自定义搜索,mysql,ruby-on-rails,ruby,ruby-on-rails-3,Mysql,Ruby On Rails,Ruby,Ruby On Rails 3,我正在尝试在Rails应用程序中实现自定义搜索功能 我有3个表UserCompany和CompanyUser 我宣布的关系如下 class CompanyUser < ActiveRecord::Base belongs_to :company belongs_to :user ... end 在User.rb中 has_many :company_users, dependent: :destroy has_many :companies, through: :company

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

我有3个表
User
Company
CompanyUser

我宣布的关系如下

class CompanyUser < ActiveRecord::Base

  belongs_to :company
  belongs_to :user
...
end
在User.rb中

has_many :company_users, dependent: :destroy
has_many :companies, through: :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
,我才能得到结果。我试图做的是使用用户表和公司表中的字段进行搜索。例如,来自用户的
电子邮件和来自公司的
姓名

@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
使用
join
语句,您可以将
CompanyUser
表与公司和用户一起加入,因此您也可以在该表上应用过滤器


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

除非加入其他表,否则无法查询它们。此外,第一个查询使用了
all
方法的一个非常旧的签名,这在最近的Rails版本中不再受支持。。我以前试过。。它给出了错误。
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