On Aug 16, 2012, at 3:45 PM, AmateurCoder wrote:

> Walter,
> 
> Thanks for your reply.  
> 
> I am going for a display like the following:
> 
> 
> Fruit
>   Apple
>   Orange
>    Peach
> Meat
>   Beef
>   Fish
>   Poultry
> 
> Fruit and Meat are  category names and apple, orange, peach, etc are  type 
> names.
> 
> This information is being stored in a join table that look like the following:
> 
> post_id  keyword_category_id   keyword_type_id
> 1              1                                    1 
> 1              1                                    2        
> 1              1                                    3                  
> 
> The schema look like the following:
> 
> keywords table
> id :integer
> post_id: integer
> keyword_category_id :integer
> keyword_type_id :integer
> 
> keyword_categories table
> id  :integer
> name: string
> 
> keyword_types table
> id: integer
> name: string
> keyword_category_id :integer
> 
> I thought I could do the following:
> .
> <% @post.keywords.group_by(&:keyword_category).each do |category, type| %>
>   <li><%= category.keyword_category.name %></li>
>     <% type.each do |type| %>
>   <%= type.keyword_type.name %>
>   <% end %>
> <% end %>
> This code doesn't work.
> 
> I had to use &:keyword_category_id as in the code below.  The output look like
> 
>  1 
>    1
>    2
>    3
>  2
>    4
>    5
>    6
>    
> I want to display the category names and type names instead of the foreign 
> key ids.  I think I am using group_by wrong or even perhaps i need an 
> association in the other direction.  I am just baffled at the moment.
> 
> 
> Any ideas?
> 
> 

You might want to look at this blog post (kind of old, but it might help): 
http://ariejan.net/2007/01/12/rails-group-results-by-week-using-group_by/

You might also want to read through the Rails Guide on Associations, and see if 
you can parse out what's missing in your relationships. Make sure that each 
has_many is balanced on the other side by a belongs_to.

Walter

> 
> 
> On Wednesday, August 15, 2012 10:14:24 AM UTC-5, AmateurCoder wrote:
> I have a blog application where I would like to display on the post view a 
> list of keyword categories and associated keyword types.
> 
> #views/post.html.erb
> 
> .
> .
> .
> <% @post.keywords.group_by(&:keyword_category_id).each do |category, type| %>
>     <li><%= category %></li>
>     <% type.each do |type| %>
>         <%= type.keyword_type_id %>
>     <% end %>
> <% end %>
> .
> .
> .
> 
> 
> The keyword categories and keyword types are in separate models.  The 
> association for the models are:
> 
> #keyword_category.rb
>  has_many :keyword_types
>  
> #keyword_type.rb
>     belongs_to :keyword_category
>     
> #post.rb
> 
>     has_many :keywords
>     has_many :keyword_types, through: :keywords
>     has_many :keyword_categories, through: :keywords
>     
> I am using a join table called 'keywords', for keeping track of the keyword 
> categories and keyword types for a post.
> 
> The keywords table has the following fields.
> post_id
> keyword_category_id
> keyword_type_id
> 
> 
> 
> The issue I am having is the view is displaying the ids and I can't figure 
> out how to do something like category.keyword_category.name?  Any ideas on 
> what I am doing wrong?  Thanks in advance for your help.
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Ruby on Rails: Talk" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> To view this discussion on the web visit 
> https://groups.google.com/d/msg/rubyonrails-talk/-/fSmxI0LAIrwJ.
> For more options, visit https://groups.google.com/groups/opt_out.
>  
>  

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to