有一个下拉菜单,其中包含一系列AR对象 如果购物车中的金额超过3000,则需要显示该元素。
我这样做
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
我使用 rails 3.2.6 和 ruby 2.0.0 :)
我认为做错和丑陋的方法
告诉我如何更好地纠正代码。
感谢。
答案 0 :(得分:0)
我相信您可以使用简单的SQL或ActiveRecord方法来实现结果。就像下面的片段一样可以解决你的问题。
YourModel.where(["name = ? AND basket_sum < ? ", "freedelivery", 3000])
或,
YourModel.where("name = ?", "freedelivery").where("basket_sum < ?", 3000)
答案 1 :(得分: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) }
并将其与关联链接
element_of_dropmenu.premium