Forum: Ruby on Rails Problem updating child row from parent model

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.
Guillaume (Guest)
on 2006-06-03 02:01
I developped a web site with Ruby on Rails, but I get a problem during
the testing.
I have a parent table called "orders" and a child table called
"line_items".
I created some data for the test in the files "test/fixtures/orders.yml"
and "test/fixtures/line_items.yml".
In the file "test/unit/order_test.rb" I wrote some code to test the
"Add", "Update" and "Destroy" for my model"Order".
My problem is that on the "Update" I try to update a quantity which is a
field of my table "line_items" which is a child of my table "orders".

For that test I used the following code:

  def test_update
    assert_equal 2, @order.line_items.first.quantity
    @order.line_items.first.quantity = 4
    assert @order.save, @order.errors.full_messages.join("; ")
    @order.reload
    assert_equal 4, @order.line_items.first.quantity
  end

And I get the following result:

  1> Failure:
  test_update<OrderTest> [test/unit/order_test.rb:25]:
  <4> expected but was <2>.

I tried lots of different things, but I always get that error. I really
don't know why.

Here's the declaration of my model order.rb

  class Order < ActiveRecord::Base
    has_many :line_items, :exclusively_dependent => true
  end

Here's the declaration of my model line_item.rb

  class LineItem < ActiveRecord::Base
    belongs_to :order
  end

And I put at the begining of the order_test.rb file.

  fixtures :orders, :line_items

I guess I'm doing wrong, maybe it's not the way to update a child row or
I probably miss something, unless we can't update a child row through a
parent model.
If someone has the answer and can help me to figure out why the update
doesn't work, that will be great.

Thank you.
This topic is locked and can not be replied to.