2012-12-13 2 views
3

액티브 모델/레코드 관계와 속성의 위치 (모델) 및 호출 위치에 따라 속성을 호출하는 방법을 더 잘 이해하고자합니다. 예를 들어 내가보기에 그렇게다른 연관된 모델의 속성에 액세스하기 레일 3

def all_recipes 
@recipes = Recipe.all 
end 

같은 레시피 컨트롤러 내에서 속성 dish_name에 액세스 할 수 있도록

<% @recipes.each do |r| %> 
<%= r.dish_name %> 
<% end %> 

지금 내가 내 컨트롤러라고 worldrecipes 그리고 난 내에서 조리법 속성에 액세스하고 싶은 말은 같은 나라에서 모든 요리법을 반환하는 방법을 작성했습니다. 국가가 관계 한 많은 조리법이있다

그래서 내 방법 내 컨트롤러

@worldrecipes = Country.where(:name => params[:name]) 

def self.top_countries 
joins(:recipes). 
    select('countries.*, count(*) AS recipes_count'). 
    group('countries.id'). 
    order('recipes_count DESC') 
end 

입니다

<% @worldrecipes.each do |r| %> 
<%= r.name %> 
<% end %> 

그래서 국가 이름 속성에 접근은 간단합니다 그것의 국가 모델과 내 쿼리 결과가 반환되는 (내 생각) 그게 ... 내 질문 사람이

감사를 위해이 문제를 해결 또는 일부 황금 규칙하는 방법에 대한 가이드 있는가, 내가 의미가 국가 이름

희망에 그 링크에 내 요리법 모델에서 dish_name 속성에 액세스 할 방법입니다

@country=Country.where(:name=>params[:name]).first 
@[email protected] 

그리고보기 :

<% @worldrecipes.each do |r| %> 
    <%= r.dish_name %> 
<% end %> 
당신은
+0

'@worldrecipes = Country.where (: name => params [: name])'는 이름이 'params [: name]'또는 해당 국가의 요리법 배열로 이름이 지정된 국가 레코드를 제공합니까 ?? –

+0

그것은 나의 이름으로 params [: name]의 레코드 이름을 제공한다. "Italy"라는 단어가 페이지에 인쇄되어 있는데 이탈리아에는 2 개의 레코드가 있고, 하나만 표시되고 있기 때문에 완전히 맞지 않는다. – Richlewis

답변

3

:

country.rb

class Country < ActiveRecord::Base 
    has_many :recipes 
end 

recipe.rb

class Recipe < ActiveRecord::Base 
    belongs_to :country 
end 

당신이 만약을 이미 그렇게하지 않았다면, 다음을 실행하여 recipe 모델에 foreign_key 속성을 추가하십시오 이전 :

rails g migration add_country_id_to_recipe country_id:integer 

이제 국가 별 해당 요리법을 쉽게 쿼리 할 수 ​​있습니다. 보기에 그런

@worldrecipes = Country.where(:name => params[:name]) 

: 컨트롤러에서 '황금 규칙'에 관해서

<% @worldrecipes.each do |c| %> 
    <% c.recipes.each do |r| %> 
    <%= r.dish_name %> 
    <% end %> 
<% end %> 

은 내가보기 엔 당신이 Association Basics을 확인하시기 바랍니다. 이것은 당신이 협회에서 할 수있는 일에 대한 개관을위한 장소입니다.

+0

데이터베이스에서 국가를 가져올 때 포함을 사용할 필요가 없습니다. 그것은 아마 기억을 낭비 할 것이고, 내가 말하는 것에 대해 안다면 보통 한 나라 밖에 없습니다. –

+0

좋아요. 그래서 중첩 된 블록을 만들고 지금은 출력에 혼란 스럽습니다. 내 모든 조리법을 그 속성으로 모두 인쇄했습니다. 내 협회는 당신이 말했듯이 처음부터 그랬습니다. – Richlewis

+0

'= '보기의 2 번 줄에서 –

4

나는 당신이 필요로하는 것은 생각

params[:name]

편집에 의해 제공되는 이름을 가진 국가의 조리법의 요리 이름을 인쇄 할 것이다 : 좋아, 당신을 위해이 내가 분명히하자 :

귀하의 모델 관계는 각 나라가 가지고 설치 등이다 많은 요리법. 즉 국가에는 많은 요리법이 있습니다.

그래서 당신은,

has_many :recipes 

country.rb에서 당신이 국가에 속하는 모든 조리법을 액세스 할 때

이제 recipe.rb에서

belongs_to :country 

, 무엇을 당신은 country_record.recipes (country_record는 필요한 국가 기록의 대상이됩니다)로 전화하십시오.

그리고 당신은, 다른 나라로 호출 할 때 실제로 국가 자체와 국가의하지 조리법을 나타내는 액티브 레코드 객체입니다 무엇을 얻을 그 이유는 이탈리아입니다 (: 이름 => PARAMS [이름]) 인쇄되었습니다.

희망이 도움이되었습니다.

당신이 당신의 모델에 연관 설정이 있는지 확인하려면 우선 들어
+0

# Richlewis

+0

에 대한 정의되지 않은 메서드 인 'recipes'는 모델 파일을 확인합니다. 관계를 만들었습니까? –

+0

관계는 당신이 말한대로 – Richlewis

관련 문제