(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 実装を歓迎します。