Associations and accessors...has to be something obvious I'm

I’m quite the Rails beginner because I’m trying to do something pretty
fundamental with associations. I think I just need a good shove in the
right direction. TIA!

schema:
CREATE TABLE ticket_statuses (
id int(11) NOT NULL,
status varchar(255) default NULL,
PRIMARY KEY (id)
);

CREATE TABLE tickets (
id int(11) NOT NULL,
title varchar(255) default NULL,
details text,
status_id int(11) default NULL,
opened_at datetime default NULL,
closed_at datetime default NULL,
last_activity_at datetime default NULL,
PRIMARY KEY (id),
KEY fk_ticket_status (status_id),
CONSTRAINT fk_ticket_status FOREIGN KEY (status_id) REFERENCES
ticket_statuses (id)
);

models:
Ticket belongs_to :ticket_status
TicketStatus has_many :tickets

ticket controller:

def list
@ticket_pages, @tickets = paginate :tickets, :order => “id DESC”,
:per_page => 10
end

ticket list view:

<% for ticket in @tickets %>
<tr class="<%= cycle(“list-line-odd”, “list-line-even”) %>">

<%= link_to ticket.id, { :action => ‘show’,
:id => ticket }, :class => ‘ticket-yellow’ %>
<%= h(ticket.title) %>
<%= ticket.ticket_status.status %>
<%= ticket.last_activity_at %>

<% end %>

error:
You have a nil object when you didn’t expect it!
The error occured while evaluating nil.status

Extracted source (around line #16):

13: <tr class="<%= cycle(“list-line-odd”, “list-line-even”) %>">
14:

<%= link_to ticket.id, { :action =>
‘show’, :id => ticket }, :class => ‘ticket-yellow’ %>
15: <%= h(ticket.title) %>
16: <%= ticket.ticket_status.status %>
17: <%= ticket.last_activity_at %>
18:
19: <% end %>

I’m trying to display the ticket’s actual status, not the status_id.
Do I have an association setup incorrectly? Am I breaking a naming
convention or something? Thanks for any help!

Hi –

On Sat, 23 Dec 2006, JL Smith wrote:

);
KEY fk_ticket_status (status_id),
CONSTRAINT fk_ticket_status FOREIGN KEY (status_id) REFERENCES
ticket_statuses (id)
);

models:
Ticket belongs_to :ticket_status
TicketStatus has_many :tickets

You’ve named your foreign key status_id, but ActiveRecord will look
for ticket_status_id by default. Try renaming the column.

David


Q. What is THE Ruby book for Rails developers?
A. RUBY FOR RAILS by David A. Black (Ruby for Rails)
(See what readers are saying! http://www.rubypal.com/r4rrevs.pdf)
Q. Where can I get Ruby/Rails on-site training, consulting, coaching?
A. Ruby Power and Light, LLC (http://www.rubypal.com)

You’ve named your foreign key status_id, but ActiveRecord will look
for ticket_status_id by default. Try renaming the column.

David

I had trouble posting this topic from google groups a WEEK ago and now
it’s finally shown up. I gave up on google groups and registered on
ruby-forum.com to finally get it posted…something isn’t working right
on google groups it would seem.

http://www.ruby-forum.com/topic/92132

I appreciate your help though. Thanks.