0

我有两个模型 A 和 B。A has_many B's。B 有一个属性 :number

什么是rails方式(我可以对每个进行一些编码,但这不是重点)来查找A是否具有给定数字的B对象?

我试过 find 但因为它是一个关联,所以它给了我这个错误:

>> 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

4 回答 4

1

find在您的关联上被 ActiveRecord 覆盖。我想你想要的是Enumerable#select

bs = B.all
bs_with_number_eq_8 = bs.select {|f| f.number == 8}

这不会生成 SQL 查询,但只会遍历集合bs并过滤它们number == 8

于 2012-11-14T17:30:45.407 回答
1

那个更好吗?

a.bs.select{ |b| b.number == 8 }.any? #=> return true if a has one b o more with number == 8
于 2012-11-14T17:16:03.867 回答
0

我不明白你想要什么。你能放很多代码吗,我可以有更多的信息。

你也可以试试这个:

bs.find{|f| f.try(:number) == 8}

于 2012-11-14T17:26:42.290 回答
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 查询。

于 2012-11-14T17:49:53.390 回答