Создание области видимости в Rails 3 на основе отношения has_one: through - PullRequest
0 голосов
/ 18 февраля 2011

Rails 3.0.3 и Ruby 1.9.2

У меня есть следующий класс

class item < ActiveRecord::Base
  belongs_to :user
  has_one :country, :through => :user

  ..

end

Итак, itemA.country выдает "United States"

Вопрос в том,как создать (именованную) область для всех элементов, принадлежащих пользователям в США

Когда я пытаюсь что-то вроде:

scope :american, where('countries.name' => 'United States').includes([:user, :country])

, Item.american продолжает возвращаться пустым, даже когда Item.first.country => 'United States'

Кстати, в версии Rails 2.3.4 у нас было:

named_scope :american, :include => {:user, :country}, :conditions => { 'countries.printable_name' => 'United States' }

И это работало так, как рекламировалось.

1 Ответ

2 голосов
/ 18 февраля 2011

Вы забыли множить имена таблиц, я также думаю, что порядок включения и где могут иметь значение.Также рекомендуется использовать объединение вместо этого при указании условий для ассоциаций, таких как:

scope :american, joins(:users, :countries).where('countries.name' => 'United States')

Если вы предпочитаете все еще использовать, включает:

scope :american, includes(:users, :countries).where('countries.name' => 'United States')
...