【问题标题】:Rails, search item in different model?Rails,不同型号的搜索项目?
【发布时间】: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 =&gt; ["jobno LIKE :q OR casesubject LIKE :q OR transport LIKE :q OR ...", {:q =&gt; search_condition}])这样重写你的查询可能会更具可读性

标签: ruby-on-rails database search


【解决方案1】:

您可能希望使用:joins =&gt; [: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])

【讨论】:

  • 所以考虑到两个 cmets,我已经更新了我的问题 - 对吗?
  • 别忘了添加:join。所以应该是这样的:find(:all, :conditions =&gt; ["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 =&gt; search_condition}], :join =&gt; [:person, :company]).
  • 点符号也使用按照 ruby​​ 约定复数的表名。所以应该是find(:all, :conditions =&gt; ["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 =&gt; search_condition}], :join =&gt; [:person, :company])
  • 嗯,我添加并修改了上面的内容以包含我想要的所有字段,但出现以下错误:ArgumentError in KasesController#search Unknown key(s): join
  • 对不起,愚蠢的错误:正确的名称不是join,而是joins。
猜你喜欢
  • 1970-01-01
  • 2012-04-17
  • 1970-01-01
  • 2011-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多