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


#1

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!


#2

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 (http://www.manning.com/black)
(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)


#3

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.