0

(Rails 3 を使用)

関連を介して has_many に 2 つのモデル (Vehicle と Capabilities) があります。

したがって、車両 1 は機能 1 (例: 牽引)、機能 2 (例: 乗客)、機能 3 (例: 飛行) などを持つことができます。

v = Vehicle.first
v.capabilities.pluck(:name) #=> will give something like ['towing', 'passenger', 'flying']

特定の機能を持ってはならないすべての車両 (たとえば、飛行できないすべての車両) を検索したいと考えています。

以下のようなクエリを試してみましたが、まだ空飛ぶ乗り物が含まれています。主な理由は、飛行機には他の機能もあるからだと思います。

non_flying = Vehicle.includes(:capabilities).where('capabilities.id NOT IN (?)', [2,3])
non_flying.first.capabilities.pluck(:name) #=> will give something like ['towing']. 

飛行能力は含まれていませんが、私はこの車両を返却したくありません。これをどのように書きますか?

可能であれば、meta_wheel や squeel gem を使用したくありませんが、より簡単な解決策がない限り、任意の arel_table 実装を歓迎します。

4

2 に答える 2

0

このクエリを試してください

non_flying = Vehicle.all - Vehicle.includes(:capabilities).where('capabilities.id IN (?)', [2,3]).all
于 2013-11-01T09:22:39.263 に答える