2013-01-22 40 views
1

我正在做本书的第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 
+0

注意这个测试可以运行在午夜病理情况下失败;国际海事组织最好是创建一个变量来保存结果,以免它被调用两次。 –

回答

1

记住,你需要做转让后,save@order

+0

是的,我已经在创建操作中的respond_to中使用了'if @ order.save'来保存它。这是你的意思吗? – Yuli

+0

够公平的。也许你可以发布更多的创建操作? – Chowlett

+0

我在帖子中添加了创建操作。 – Yuli

0

我遇到了同样的错误,这是因为我忘了更新order_params。 您需要将权限授予:ship_date,否则日期值将无法保存在ship_date列中。这也是为什么你

def order_params 
    params.require(:order).permit(:name, :address, :email, :pay_type, :ship_date) 
相关问题