2010-05-17 2 views
0

У меня есть модель 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 

не работают :(

Возможно ли это

Спасибо,

Дэнни

EDIT:

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}]) 

Нравится?

EDIT 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

Это, вероятно, будет более читаемым, если вы переписать запрос типа 'найти (: все,: условия => [" jobno LIKE: ● ИЛИ casesubject НРАВИТСЯ: ● ИЛИ транспорт LIKE: д OR ... ", {: q => search_condition}])' – Voyta

ответ

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]) 
+0

Итак, учитывая оба комментария, я обновил свой вопрос - это правильно? – dannymcc

+0

Не забудьте добавить ': join'. Так что это должно быть так: 'find (: all,: conditions => [" kase.jobno LIKE: q ИЛИ kase.casesubject LIKE: q ИЛИ kase.transport LIKE: q ИЛИ имя_компании company_panyname: q ИЛИ person.personname LIKE: q ", {: q => search_condition}],: join => [: person,: company])'. –

+0

Точечная нотация использует имена таблиц, которые по соглашению ruby ​​являются множественными. Таким образом, это должно быть 'find (: all,: conditions => [" kases.jobno LIKE: q ИЛИ kases.casesubject LIKE: q ИЛИ kases.transport LIKE: q ИЛИ company.companyname LIKE: q ИЛИ people.personname LIKE: q ", {: q => search_condition}],: join => [: person,: company])' –

Смежные вопросы