3

アクティブなモデルとレコードの関係、および属性が配置されている場所(モデル)とそれらを呼び出す場所に応じて属性を呼び出す方法について、より深く理解することを目指しています。たとえば、レシピコントローラー内から属性dish_nameにアクセスできます。

 def all_recipes
@recipes = Recipe.all
 end

ビューで

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

ここで、コントローラー内からworldrecipesというレシピ属性にアクセスしたいとします。同じ国のすべてのレシピを返すメソッドを作成しました。国には関係として多くのレシピがあります

だから私の方法は

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

私のコントローラー

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

と表示

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

したがって、国名属性へのアクセスは、国モデルの場合と同様に簡単であり、クエリ結果が返される場所です(私は思います)...私の質問は、レシピモデルからそのリンクへのdish_name属性にアクセスする方法です。国名

それが理にかなっていることを願って、誰かがこれを解決する方法やこれのためのいくつかの黄金のルールについてのガイドを持っていますか

ありがとうございました

4

2 に答える 2

4

私はあなたが必要なものは次のとおりだと思います:

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

そして、ビューで:

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

これにより、国のレシピの料理名が、によって提供された名前で印刷されます。params[:name]

編集:わかりましたあなたのためにこれを片付けさせてください:)

モデルの関係は、各国に多くのレシピがあるように設定されています。つまり、国には多くのレシピがあります。

だからあなたは、

has_many :recipes

country.rbと

belongs_to :country

レシピ.r​​bで

これで、国に属するすべてのレシピにアクセスする場合は、次のように呼び出しますcountry_record.recipes(country_recordは、必要な国レコードのオブジェクトです)。

そして、Country.where(:name => params [:name])を呼び出すと、実際に取得されるのは、国のレシピではなく、COUNTRY自体を表すアクティブなレコードオブジェクトであり、それがイタリアが印刷された理由です。

これがお役に立てば幸いです。

于 2012-12-13T18:50:29.780 に答える
3

手始めに、モデルに関連付けが設定されていることを確認する必要があります。

country.rb

class Country < ActiveRecord::Base  
  has_many :recipes
end

レシピ.r​​b

class Recipe < ActiveRecord::Base  
  belongs_to :country
end

まだ行っていない場合は、次の移行を実行して、レシピモデルに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 %>

「ゴールデンルール」に関しては、AssociationBasicsを確認することを強くお勧めします。これは、アソシエーションでできることの概要を説明するための頼りになる場所です。

于 2012-12-13T18:55:59.987 に答える