Forum: Ruby on Rails Join, then view data

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Scott Parks (Guest)
on 2007-06-17 02:59
(Received via mailing list)
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
Bill W. (Guest)
on 2007-06-17 18:45
(Received via mailing list)
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
Scott Parks (Guest)
on 2007-06-17 19:06
(Received via mailing list)
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
Bill W. (Guest)
on 2007-06-17 20:15
(Received via mailing list)
Hi Scott,

Scott Parks wrote:

> Thank you for your response,

You're welcome.

> 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/revi....
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
Scott Parks (Guest)
on 2007-06-18 05:28
(Received via mailing list)
On Jun 17, 2007, at 12:14 PM, Bill W. wrote:
> this particular topic.
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
Scott Parks (Guest)
on 2007-06-18 05:32
(Received via mailing list)
On Jun 17, 2007, at 12:14 PM, Bill W. wrote:
> this particular topic.
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
Scott Parks (Guest)
on 2007-06-18 05:44
(Received via mailing list)
On Jun 17, 2007, at 12:14 PM, Bill W. wrote:
> this particular topic.
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
Bill W. (Guest)
on 2007-06-18 17:05
(Received via mailing list)
Hi Scott,

Scott Parks wrote:

> here and was missing this step!
Glad to hear you got it figured out!

Best regards,
Bill
This topic is locked and can not be replied to.