2016-10-16 134 views
0

所以下面是我测试了我的控制器防止重复添加到购物车

def add_to_cart 
    @cart = current_cart 
    if @cart.tutors.where(params[:tutor_id]).empty? 
     @cart.add_tutor(params[:tutor_id]) 
     flash[:success] = 'You have successfully added the tutor to your shortlist!' 
     redirect_to show_path 
    else 
     flash[:danger] = 'You have already shortlisted the tutor!' 
     redirect_to show_path 
    end 
    end 

我不知道这是否是去测试正确的方式,如果tutor_id出现在车中的作用。我实际上尝试过在轨道控制台中测试各种检查儿童属性的方法。我抵达Parent.Child.where(:id => X)作为一种方式来检查是否有任何孩子的id = X.

这是什么显示在我的服务器(或开发日志)时调用方法。

Started POST "/add_to_cart/11" for 116.87.14.150 at 2016-10-16 07:32:09 +0000 
Cannot render console from 116.87.14.150! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 
Processing by CartsController#add_to_cart as HTML 
    Parameters: {"authenticity_token"=>"XzHaIJMzIz9I84W5tmLuj+28SBvVP9pc1JdZOyQaYEr286JNIw4J8tKtSON7eIWsdf0Lc6ogCdT2LrdtVVxGoA==", "tutor_id"=>"11"} 
cart_id = 17 
    Cart Load (0.2ms) SELECT "carts".* FROM "carts" WHERE "carts"."id" = ? LIMIT 1 [["id", 17]] 
    (0.2ms) SELECT COUNT(*) FROM "tutors" INNER JOIN "cart_tutors" ON "tutors"."id" = "cart_tutors"."tutor_id" WHERE "cart_tutors"."cart_id" = ? AND (11) [["cart_id", 17]] 

反正它不断处理else部,这意味着其不工作等我的意思它是,这可能意味着其不检查的ID等我打算为它做。我使用正确的方法吗?如果不是,我应该怎么做呢?

回答

0

你已经得到了一些错误:

@cart.tutors.where(params[:tutor_id]).empty? 

这让不正确的SQL查询:

WHERE "cart_tutors"."cart_id" = ? AND (11) 

和(11)

尝试下一个:

@cart.tutors.where(id: params[:tutor_id]).empty? 
+0

你好,它完美的作品。谢谢。我可以澄清理解的目的,我知道在rails4中做'id:'和':id =>'是一样的,所以这意味着我应该完成'.where(:id => params [:tutor_id]) '就像在测试我的轨道控制台中的查询时所做的一样? – angkiki

+0

':id =>' - 这是散列的旧语法。从ruby 1.9推荐使用'id:' - 但总的来说它是一样的。 – kunashir

相关问题