1

データベースには、車とドメインの 2 つのテーブルがあります。1 台の車が複数のドメインを持つことができ、1 つのドメインが複数の車を持つことができます。

私のプロジェクトでは、次の 3 つのモデルがあります。

class Car < ActiveRecord::Base

  has_many :cars_domains
  has_many :domains, :through => :cars_domains

...

class Domain < ActiveRecord::Base

    has_many :cars_domains
    has_many :cars, :through => :cars_domains
...

class CarsDomain < ActiveRecord::Base
  belongs_to :car
  belongs_to :domain
end

ドメインのない車を見たい:

@cars = Car.find(:all, :conditions => ['id not in(select car_id from cars_domains where domain_id = ?)', params[:domain_id]])

仕事ですが、なかなか難しいと思います。多分それをもっと簡単にすることは可能ですか?

4

1 に答える 1

1

私が作成したクイックアプリでこれを試しました:

domain = Domain.find(params[:domain_id])
Car.includes(:cars_domain).where('cars_domain.domain_id <> ?', domain.id)

ドメインオブジェクトをクエリする理由は、SQLのクエリパラメータとしてリクエストヘッダーから値を渡すことにいつもうんざりしているためです。

于 2012-08-29T14:35:01.737 に答える