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.
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?
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.
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.
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.
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
…
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
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.