2017-05-03 52 views
-1

有一个包含AR对象数组的下拉菜单。
需要显示的元素,如果在车超过3000从AR对象数组中删除元素

量我这样做

element_of_dropmenu.delete_if {|x| x.name == "free delivery" && basket_sum < 3000} # remove one element 

购物车中的量是不是为DeliveryType如此。这是一个不同的模型

你可以这样做

if sum > 3000 
    element_of_dropmenu 
else 
element_of_dropmenu.drop(1) 
end 

我需要显示的所有元素时sum>30,并删除一个元素时sum<30

我使用轨3.2.6红宝石2.0.0 :)

我认为这样做是错误和丑陋的。
告诉我如何更好地更正代码。
谢谢。

+0

你可以使用'where'我thod,或者在你的'element_of_dropmenu'中,或者创建一个新的变量。如果你发布如何设置你的'element_of_dropmenu'会有帮助。 –

回答

0

我相信你可以用简单的SQL或ActiveRecord方法实现结果。像下面的片段可以解决你的问题。

YourModel.where(["name = ? AND basket_sum < ? ", "freedelivery", 3000]) 

,或者

YourModel.where("name = ?", "freedelivery").where("basket_sum < ?", 3000) 
+0

购物车中的金额对于DeliveryType不是真实的。这是一种不同的模式。我更新问题。 – dmitriy

0

您不能从4.1呼吁ActiveRecord的mutator方法开始检查release notes

关系不再有一个像#map mutator方法!和#delete_if。在使用这些方法之前,通过调用#to_a转换为数组。

您可以使用select

element_of_dropmenu.select {|x| x.name != "free delivery" && basket_sum > 3000} 

或者作为marmeladze建议您可以使用WHERE子句或更好的创建范围

scope :premium, -> { where("name = ? AND basket_sum > ?", "free delivery", 3000) } 

并与联想IT连锁

element_of_dropmenu.premium 
+0

我使用轨3.2.6和红宝石2.0.0 :) – dmitriy

+0

然后它应该工作,但你仍然可以尝试你与这 –

+0

运气我会说范围将是一个好主意 –