Confused by the unit test results

I’m testing the relation between two of my models: MessageThread
(parent), which has_many Message (children). When I run the following
test, it gives me an error:

test with a valid message

def test_valid_message_new
thread = MessageThread.new :title => ‘awesome thread’
message = thread.messages.build(:body =>‘total awesomeness’)
assert thread.valid?, ‘thread not valid’
assert (thread.messages.size == 1)
assert_equal ‘total awesomeness’, message.body
assert !thread.messages[0].nil?
#line 182, and the line below, line 183
assert thread.messages.find(:first, :conditions => {:body =>
‘total awesomeness’}), ‘Cannot find message’
end


Loaded suite message_thread_test
Started
…F
Finished in 0.285501 seconds.

  1. Failure:
    test_valid_message_new(MessageThreadTest) [message_thread_test.rb:
    183]:
    Cannot find message.
    is not true.

Why doesn’t method find() find anything? Is the :condition parameter
incorrect? I tried saving message, but it still didn’t find the
message I was looking for. Is the find method deprecated?

On 4 Jan 2008, at 16:37, Taro wrote:

assert (thread.messages.size == 1)
…F
message I was looking for. Is the find method deprecated?
Neither of those objects have been saved, so there is nothing to find.
you would have to save both thread & message.

Fred

Frederick C. wrote:

On 4 Jan 2008, at 16:37, Taro wrote:

assert (thread.messages.size == 1)
…F
message I was looking for. Is the find method deprecated?
Neither of those objects have been saved, so there is nothing to find.
you would have to save both thread & message.

Fred

Fred is a genius…

Ahhh…I have to save the thread…I see. Thank you.

On Jan 4, 11:46 am, “gemblon (t.b.)” <rails-mailing-l…@andreas-

OK, new problem:
This time, I’m using MessageBoard (child) to acts_as_list for Forum
(parent). The models looks as such:

class Forum < ActiveRecord::Base
#This is a superset of message boards
has_many :message_boards, :order => :order, :dependent => :destroy

end

class MessageBoard < ActiveRecord::Base
#This is a subset of forums
belongs_to :forum

#This causes MessageBoard to act as a list
#it uses order as its index
acts_as_list :scope => :forum_id

end

A slight mistake on my part, I wanted the message boards to be ordered
by the MySQL (I use Rails 1.2.5) column :order (as seen in line :order
=> :order). However, this error arises:

Loaded suite message_board_test
Started
…E.
Finished in 0.347567 seconds.

  1. Error:
    test_title_overlap(MessageBoardTest):
    ActiveRecord::StatementInvalid: Mysql::Error: #42S22Unknown column
    ‘position’ in ‘order clause’: SELECT * FROM message_boards WHERE
    (forum_id = 2) ORDER BY position DESC LIMIT 1

Does the column name HAVE to be “position”?

On 4 Jan 2008, at 21:26, Taro wrote:

  1. Error:
    test_title_overlap(MessageBoardTest):
    ActiveRecord::StatementInvalid: Mysql::Error: #42S22Unknown column
    ‘position’ in ‘order clause’: SELECT * FROM message_boards WHERE
    (forum_id = 2) ORDER BY position DESC LIMIT 1

Does the column name HAVE to be “position”?

No: use the :column option to acts_as_list

Fred