预期的响应是,但是
我正在关注“使用rails进行敏捷Web开发”一书。 我有个问题。 这是我在order
控制器中的new
方法:
def new @cart = current_cart if @cart.line_items.empty? redirect_to store_url, notice: "Your cart is empty" return end @order = Order.new respond_to do |format| format.html # new.html.erb format.json { render json: @order } end end
这是测试:
test "should get new" do cart = Cart.create session[:cart_id] = cart.id li = LineItem.create(product: products(:ruby)) li.cart = cart get :new assert_response :success end
rake test
显示失败:
Expected response to be a , but was
我用rails命令行检查了它,如下所示:
cart = Cart.create => # products = Product.create(:title => "Lorem Ipsum", :description => "Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem", :price => 49.50, :image_url => "ruby.png") => #<Product id: nil, title: "Lorem Ipsum", description: "Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem", image_url: "ruby.png", price: #, created_at: nil, updated_at: nil> li = LineItem.create(product: products) => # li.cart = cart => #
li.cart
显示相应的cart
,但cart.line_items
为空。 两个模型(carts和line_items)并且彼此相关。 为什么cart.line_items
空?
save
购物车分配后, save
您的列表项。
test "should get new" do cart = Cart.create session[:cart_id] = cart.id li = LineItem.create(product: products(:ruby)) li.cart = cart li.save! // Do this and make sure it doesn't raise an exception. get :new assert_response :success end
只是分配不会在数据库中注册更改,因此@cart.line_items
将保持为空。 因此,在您的控制器中,if检查将重定向。 302代码用于重定向。
或者只使用write_attribute或update_attribute
li.write_attribute :cart, cart