0

私は2つのモデルAとBを持っています。Aはhas_manyBです。Bには属性:numberがあります

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

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

これを試して、

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

これにより、1つのSQLクエリのみが呼び出されます。

于 2012-11-14T17:49:53.390 に答える
0

何が欲しいのかわかりません。たくさんのコードを入れていただけませんか。もっと情報を得ることができます。

また、これを試すことができます:

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

于 2012-11-14T17:26:42.290 に答える