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 http://www.onlamp.com/pub/a/onlamp/2006/12/14/revisiting-ruby-on-rails-revisited.html. 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