2011-04-06 13 views
5

RoR을 배우려고합니다. 첫 번째 앱 인 기본 인벤토리 응용 프로그램을 작성하려고합니다. 나는 주위를 검색하려고했지만 올바른 구문을 찾을 수 없어, 그래서 내가 물어볼 줄 알았는데.레일 3 - id 대신 이름으로 찾기

모델이 내가 원하는 데이터를 반환합니다

@items = Item.find_all_by_supplier_id '1' 

class Item < ActiveRecord::Base 
belongs_to :supplier 

class Supplier < ActiveRecord::Base 
has_many :items 

항목 컨트롤러,하지만 난 입력에에 공급 업체 이름을 기대했다 :

여기 내 설정이야 컨트롤러가 없기 때문에 ID가 일치하지 않으면 올바르게 작동합니다.

희망 정보는 충분합니다. 감사합니다.

답변

17

당신은 당신의 방법 비트를 반전하고 시도 할 수 :

@items = Supplier.find_by_name('THE NAME').items 

레일 동적 find_by_ * 및 검색을위한 find_all_by_ * 방법을 만듭니다. supplier_id로 항목을 검색하는 대신 레일스가 위 코드 스 니펫에서 설정 한 연관성을 사용하여이 작업을 수행하도록하는 것이 좋습니다. 내부적으로 이것은 여전히 ​​supplier_id를 사용하지만 레일은 사용자 대신 프로세스를 처리합니다.

이의 반대도 가능합니다, 그래서 당신이 항목을 가지고와 공급자를 원한다면, 당신은 할 수 있습니다 :

Item.find(1).supplier 
+0

고마워요! 그것은 매력처럼 작용했습니다. – rmp

0
@items = Item.joins(:suplier).where(:suplier => { :name => "Suplier name" }) 
0
Supplier.find_by_colname(params[:name]) 

colnameSupplier table column의 이름 인 우리 매개 변수 값을 확인하고 싶습니다. 레일에 우리는 위의 그림과 같이 열 이름을 find_by_과 붙일 수 있으며 레일은 마법을 보여줄 것입니다. 여기에 참조가 있습니다 Doc