2014-04-09 3 views
2

railscast #37에는 구현하려고하는 간단한 검색이 표시됩니다. 다음 협회가 있습니다 :레일 검색 쿼리 관련 모델

class Owner < ActiveRecord::Base 
    has_many :dogs 
end 

class Dog < ActiveRecord::Base 
    belongs_to :owner 
end 

개 모델에는 "name"속성이 있으며 소유자도 있습니다. 나는 "Fido"(개) 또는 "Bob"(소유자)이라고 입력하면 Fido가 목록에 표시되도록 개 목록을 필터링 할 수 있어야합니다.

모델 dog.rb :이 개 이름과 일치하는 검색어 만 반환됩니다

def self.search(search) 
    if search 
     find(:all, :conditions => ['name LIKE ?', "%#{search}%"]) 
    else 
     find(:all) 
    end 
end 

(소유자 이름이 무시됩니다) 내가 변경하려고

을 여기서 검색 현재 설정하는 방법입니다 그것은 이런 식으로 :

def self.search(search) 
    if search 
     find(:all, :conditions => ['name LIKE ? or owner.name LIKE ?', "%#{search}%", "%#{search}%"]) 
    else 
     find(:all) 
    end 
    end 

그러나 소유자 열이 없다고합니다. 검색 조건을 변경하여 개 이름과 소유자 이름을 모두 검색 할 수 있습니까?

+0

에 액세스 할 수? – MrYoshiji

답변

7

레일 규칙에 따라 Dog 모델의 경우 dogs이고 Owner 모델의 경우 owners 테이블이 있다고 가정합니다.

업데이트로 아래 search 방법 :

def self.search(search) 
    if search 
     joins(:owner).where('dogs.name LIKE ? or owners.name LIKE ?', "%#{search}%", "%#{search}%") 
    else 
     find(:all) 
    end 
    end 

당신은 순서대로 dogsowners 테이블 사이의 쿼리에 가입해야합니다 버전이 사용중인 레일 owners.name 필드

+1

Kirti : 1/MrYoshiji : 0 ... 너는 너무 빨리 대답 해! – MrYoshiji

+0

hahahah ... ROFL :) –

+1

우승자 있습니다 –