Rails按关联数组中的属性查找

时间:2012-11-14 17:14:04

标签: ruby-on-rails arrays

我有两个模型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

4 个答案:

答案 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查询。