Rails,搜索不同型号的项目?

时间:2010-05-17 14:02:26

标签: ruby-on-rails database search

我有一个kase模型,我正在使用一个简单的搜索表单。我遇到的问题是一些kases通过公司模型链接到公司,人们通过人员模型链接。

目前我的搜索(在Kase模型中)看起来像这样:

# SEARCH FACILITY
  def self.search(search)
    search_condition = "%" + search + "%"
    find(:all, :conditions => ['jobno LIKE ? OR casesubject LIKE ? OR transport LIKE ? OR goods LIKE ? OR comments LIKE ? OR invoicenumber LIKE ? OR netamount LIKE ? OR clientref LIKE ? OR kase_status LIKE ? OR lyingatlocationaddresscity LIKE ?', search_condition, search_condition, search_condition, search_condition, search_condition, search_condition, search_condition, search_condition, search_condition, search_condition])
  end

我想要解决的是,我可以添加什么条件以允许公司或个人搜索以显示他们所链接的案例。

@kase.company.companyname

company.companyname

不起作用:(

这可能吗?

谢谢,

丹尼

编辑:

find(:all, :conditions => ["kase.jobno LIKE :q OR kase.casesubject LIKE :q OR kase.transport LIKE :q OR company.companyname LIKE :q OR person.personname LIKE :q", {:q => search_condition}])

喜欢那个?

编辑2:

kase模型:

class Kase < ActiveRecord::Base
  belongs_to :company # foreign key: company_id
  belongs_to :person # foreign key in join table
  belongs_to :surveyor,
             :class_name => "Company",
             :foreign_key => "appointedsurveyor_id"
  belongs_to :surveyorperson,
             :class_name => "Person",
             :foreign_key => "surveyorperson_id"

kase控制器:

 # SEARCH FACILITY
  def self.search(search)
    search_condition = "%" + search + "%"
    find(:all, :conditions => ['jobno LIKE ? OR casesubject LIKE ? OR transport LIKE ? OR goods LIKE ? OR comments LIKE ? OR invoicenumber LIKE ? OR netamount LIKE ? OR clientref LIKE ? OR kase_status LIKE ? OR lyingatlocationaddresscity LIKE ?', search_condition, search_condition, search_condition, search_condition, search_condition, search_condition, search_condition, search_condition, search_condition, search_condition])
  # find(:all, :conditions => ["kases.jobno LIKE :q OR kases.casesubject LIKE :q OR kases.transport LIKE :q OR kases.goods LIKE :q OR kases.comments LIKE :q OR kases.clientref LIKE :q OR kases.kase_status LIKE :q OR kases.lyingatlocationaddresscity LIKE :q OR companies.companyname LIKE :q OR people.personname LIKE :q", {:q => search_condition}], :join => [:person, :company])
  end

1 个答案:

答案 0 :(得分:1)

您可能希望使用:joins => [:company, :person]选项,然后将:conditions重写为'kase.jobno LIKE ? ... company.companyname LIKE ? ...'

所以:

find(:all, :conditions => ["kases.jobno LIKE :q OR kases.casesubject LIKE :q OR kases.transport LIKE :q OR companies.companyname LIKE :q OR people.personname LIKE :q", {:q => search_condition}], :joins => [:person, :company])