我有一个循环,它碰到了一对范围,然后将结果推送到一个数组中。我遇到的问题是如果没有记录匹配范围,它仍然会返回一个ActiveRecord :: AssociationRelation []。我如何过滤这些,所以我没有让他们在我的阵列?只有当范围返回记录时才将对象推入数组,而不是空白
实施例:
class Snack
belongs_to :member
scope :red, -> { where(color: 'red') }
scope :snacktypefind, -> (snacktypefind) { where(snacktype: snacktypefind) }
end
class Member
has_many :snacks
def find_snacks(snacktypes)
returnarray = []
snacktypes.each do |snacktype|
returnarray << self.snacks.red.snacktypefind(snacktype)
end
return returnarray
end
end
然后,在图说我希望:
<% @member.find_snacks(['bannana','orange']).each do |snack| %>
<li>snack.name</li>
<% end %>
在上述情况下,我想在阵列为[]但相反,它是:
[#<ActiveRecord::AssociationRelation []>, #<ActiveRecord::AssociationRelation []>]
这次我做错了什么傻事?再次感谢您的帮助!
如果'.length> 0',为什么不推送它们? – 2014-09-04 19:05:38
我尝试过,并且由于没有长度函数而导致记录返回时出错。但我可能做错了。 – MechDog 2014-09-04 19:07:54
你可以尝试'count'。你是否试图将'concat'值实际应用到数组上,或者维护一个具有值的作用域数组,或者......? – 2014-09-04 19:10:24