我有两个模型A和B. A has_many B's。 B有一个属性:number
什么是rails方式(我可以对每个进行一些编码,但这不是重点)来查找A是否具有给定数字的B对象?
我尝试过但是因为它是一个关联,它给了我这个错误:
>> bs.find{|f| f.number == 8}
>> ActiveRecord::RecordNotFound: Couldn't find A without an ID
修改
更清楚。
如果我不得不编码,那就像是:
def is_number_in_use(number)?
self.bs.each do |b| #Consider bs as the has_many association between A and B
return true if b.numero == number
end
return false
end
答案 0 :(得分:1)
这样更好吗?
a.bs.select{ |b| b.number == 8 }.any? #=> return true if a has one b o more with number == 8
答案 1 :(得分:1)
find
被ActiveRecord覆盖。我想你想要的是Enumerable#select
:
bs = B.all
bs_with_number_eq_8 = bs.select {|f| f.number == 8}
这不会生成SQL查询,但只会迭代集合bs
并在number == 8
上过滤它们
答案 2 :(得分:0)
我不明白你想要什么。 你能放多少代码,我可以获得更多信息。
你也可以试试这个:
bs.find {| F | f.try(:number)== 8}
答案 3 :(得分:0)
试试这个,
def is_number_in_use(number)?
self.bs.collect(&:number).include?(number)
end
<强>更新强>
self.bs.where(:number => some_number).present? #this will return true or false
这将只调用一个SQL查询。