Join, then view data

I am working on my first real RoR project and have a simple question (I think it is anyway).

I have three tables: schools events event_types

I think I have the joins down with belongs_to, but how do I actually go about displaying that data on the page? I want to display most of the info from the events table, but need to pull the school name and also the event_type name. My foreign keys are events has a school id and events points to a key in event_types.

Here is my skeleton display: <% for event in @events %>   <%=h event.event_name %> <% end %>

And my model:

class Event < ActiveRecord::Base   belongs_to :school   def self.return_events     find :all   end end

class School < ActiveRecord::Base   has_many :events end

Thank you for saving me from more grey hair!

-Scott

Hi Scott,

Scott Parks wrote:

but how do I actually go about displaying that data on the page?

Here is my skeleton display: <% for event in @events %> <%=h event.event_name %> <% end %>

Your view gets the data to display from a contoller method of the same name. Assuming your view file is named skeleton.rhtml, in the skeleton method in your controller you need to set @events. That would typically result in something like...

def skeleton   @events = Event.find(:all) end

Given that you've defined a method in your model to do the find (why?), you could alternatively do

def skeleton   @events = Event.return_events end

hth, Bill

Hi Bill-

Thank you for your response, I have the view working if I try to display something from the event table, but what if I want to display something from the table that is joined in?

In other words I have <%h event.event_name %> but I also want to display the school_name from the schools table.... <%h event.school_name %> will not work because school_name is in the schools table, so my
question is - I have the tables joined, now how I can display data from both?

Thank you!

-Scott

Hi Scott,

Scott Parks wrote:

Thank you for your response,

You're welcome.

I have the view working if I try to display something from the event table, but what if I want to display something from the table that is joined in?

In other words I have <%h event.event_name %> but I also want to display the school_name from the schools table.... <%h event.school_name %> will not work because school_name is in the schools table, so my question is - I have the tables joined, now how I can display data from both?

If I understand what you're trying to do, you need to use event.school.school_name. You might want to take a look at the cookbook tutorial at Radar – O’Reilly. It sounds like you're implementing some of the same basic functionality. Take a look at the list.rhtml code on page 2 of Part 2 for the analogy to this particular topic.

hth, Bill

Bill-

Thank you again, this tutorial has helped me more than the several books I have sitting at my feet. However, I still can't get the school_name to display?

Here is my event_controller:

class EventController < ApplicationController    def index      list      render :action => 'list'    end

   def list      if params[:school_id].nil?        @events = Event.find(:all)      else        @events = Event.find(:all,          :conditions => ["school_id = ?", params[:school_id]])          params[:school_id] = nil        end      end

     def show        @event = Event.new      end end

Then in my list.rhtml I am doing this:

<% for event in @events %>    <%=h event.event_name %>    <%=h event.school_name %>    <br /> <% end %>

which results in:

undefined method `school_name' for #<Event:0x259a08c>

Any thoughts? Thank you!

-Scott

PS:

I did try

<% for event in @events %>    <%=h event.event_name %>    <%=h event.school.school_name %>    <br /> <% end %>

Which gives me:

Mysql::Error: #42S22Unknown column 'schools.id' in 'where clause': SELECT * FROM schools WHERE (schools.`id` = 1)

The table name is schools with school_id, NOT schools_id, where is it coming up with an s on the end of the id?

-Scott

PSS - I GOT IT! WHEW! Pulling my hair out over this one .... here is the deal on what was going on:

I had a table called schools with an id column called school_id, I also have an events table with an events_id column. Events contains a foreign key called school_id. How I solved this was to rename the school_id column to id and the events_id column to just id.

WORKS! YAW! Sorry about the confusion, old school thinking here and was missing this step!

Thank you again for your help! I am sure I will have more questions soon enough.

-Scott

Hi Scott,

Scott Parks wrote:

I GOT IT! WHEW! Pulling my hair out over this one .... here is the deal on what was going on:

I had a table called schools with an id column called school_id, I also have an events table with an events_id column. Events contains a foreign key called school_id. How I solved this was to rename the school_id column to id and the events_id column to just id.

WORKS! YAW! Sorry about the confusion, old school thinking here and was missing this step!

Glad to hear you got it figured out!

Best regards, Bill