【发布时间】:2011-02-20 10:26:12
【问题描述】:
我有一个 kase 模型,我在其中使用了一个简单的搜索表单。我遇到的问题是一些 kase 通过公司模型链接到公司,通过人员模型链接到人员。
目前我的搜索(在 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:
卡斯型号:
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"
卡斯控制器:
# 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
【问题讨论】:
-
如果你像
find(:all, :conditions => ["jobno LIKE :q OR casesubject LIKE :q OR transport LIKE :q OR ...", {:q => search_condition}])这样重写你的查询可能会更具可读性
标签: ruby-on-rails database search