0

次のスキーマがあります。

class Locale < ActiveRecord::Base
  has_many :shops

  # region : String
end

class Shop < ActiveRecord::Base
  belongs_to :locale
  has_many :carts

  scope :europe, joins(:locale).where('locales.region = ?', 'Europe')
end

class Cart < ActiveRecord::Base
  belongs_to :shop

  scope :purchased, where('purchased_at is not null')

  # purchased_at : DateTime
end

特定の地域で購入されたすべてのカートを見つけたいのですが、クエリをもう少し読みやすくするためにいくつかのスコープを設定していますが、試してみると:

Cart.purchased.join(:shop).merge(Shop.europe)

エラーが表示されます: ActiveRecord::ConfigurationError: 'locale' という名前の関連付けが見つかりませんでした。おそらくあなたはそれを書き間違えましたか?

これを機能させる方法について何か考えはありますか?

4

1 に答える 1

0
class Locale < ActiveRecord::Base
  has_many :shops

  scope :europe, where(region: 'Europe')
end

class Shop < ActiveRecord::Base
  belongs_to :locale
  has_many :carts
end


class Cart < ActiveRecord::Base
  belongs_to :shop

  scope :purchased, where('purchased_at is not null')
end

Cart.purchased.joins(shop: :locale).merge(Locale.europe)
于 2012-07-06T20:15:15.110 に答える