Accessing attributes from different associated models rails 3

activemodel, activerecord, ruby-on-rails-3

Solution

For starters you want to make sure you have the association setup in your models:

country.rb

class Country < ActiveRecord::Base  
  has_many :recipes
end

recipe.rb

class Recipe < ActiveRecord::Base  
  belongs_to :country
end

If you haven't already done so, add a foreign_key attribute to your recipe model by running the following migration:

rails g migration add_country_id_to_recipe country_id:integer

Now that your associations are in place you can easily query for a countries respective recipes. In your controller:

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

Then in your view:

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

In regards to 'golden rules' I highly recommend you check out Association Basics. This is the go-to place for an overview of what you can do with associations.

Problem

I am looking to get a better understanding of Active Model/Record relationships and how to call attributes dependent upon where the attributes are located (models) and where I am calling them. So for example I can access the attribute dish_name from within the recipe controller like so ``` def all_recipes @recipes = Recipe.all end ``` In the view ``` <% @recipes.each do |r| %> <%= r.dish_name %> <% end %> ``` Now say i want to access a recipe attribute from within my controller called worldrecipes and i have just written a method that returns all recipes with the same country. a country has many recipes as a relation So my method is ``` def self.top_countries joins(:recipes). select('countries.*, count(*) AS recipes_count'). group('countries.id'). order('recipes_count DESC') end ``` My controller ``` @worldrecipes = Country.where(:name => params[:name]) ``` and view ``` <% @worldrecipes.each do |r| %> <%= r.name %> <% end %> ``` so accessing the country name attribute is easy as its in the country model and thats where my query results are being returned from (I think)...My question is how do i access the dish_name attribute from my recipe model to that links to the country name Hope that makes sense, does anyone have a guide on how to work this out or some golden rules for this Thank you

Original source