我正在做本书的第13章“使用Rails进行敏捷Web开发”的最后一个练习。为什么不能赋值给控制器中的属性?
此前有一个名为“订单”模式,我创建了一个迁移到添加一个名为“ship_date”列:
add_column :orders, :ship_date, :datetime
然后我说的“创造”之类的respond_to之前在orders_controller行动线这样的:
@order.ship_date = Time.now.to_date
然后我修改了测试文件是这样的:
ship_date_expected = Time.now.to_date ### new line
post_via_redirect "/orders",
order: { name: "Dave Thomas",
address: "123 The Street",
email: "[email protected]",
pay_type: "Check",
ship_date: Time.now.to_date } ### new line
### some existing lines
assert_equal ship_date_expected, order.ship_date ### new line
然后我运行集成测试,但得到的故障是这样的:
test_buying_a_product(UserStoriesTest)[H:/Sites/rails_projects/depot/test/integration/user_stories_test.rb:56]:<Tue, 22 Jan 2013> expected but was <nil>.
我检查了数据库,并相信新列的存在。所以我猜想问题是关于任务。这应该是一个愚蠢的问题......但我不知道如何解决它。任何人都可以帮我吗?
ThX !!!
的创建操作:
def create
@order = Order.new(params[:order])
@order.add_line_items_from_cart(current_cart)
@order.ship_date = Time.now.to_date
respond_to do |format|
if @order.save
Cart.destroy(session[:cart_id])
session[:cart_id] = nil
OrderNotifier.received(@order).deliver
format.html { redirect_to store_url, notice: I18n.t('.thanks') }
format.json { render json: @order, status: :created, location: @order }
else
@cart = current_cart
format.html { render action: "new" }
format.json { render json: @order.errors, status: :unprocessable_entity }
end
end
end
注意这个测试可以运行在午夜病理情况下失败;国际海事组织最好是创建一个变量来保存结果,以免它被调用两次。 –