рельсы named_scope проблема с нетерпением загрузки - PullRequest
0 голосов
/ 12 июня 2010

Две модели (Rails 2.3.8):

Пользователь;имя пользователя и отключенные свойства;Пользователь has_one: профиль Профиль;полное_имя & скрытые свойства

Я пытаюсь создать named_scope, в котором исключены отключенные = 1 и скрытые = 1 профили пользователей.Более того, хотя модель User обычно используется вместе с моделью Profile, я бы хотел, чтобы это можно было указать с помощью синтаксиса профиля: include =>:.

У меня есть следующий пользователь named_scope:

  named_scope :visible, {
    :joins => "INNER JOIN profiles ON users.id=profiles.user_id",
    :conditions => ["users.disabled = ? AND profiles.hidden = ?", false, false]
  }

Это работает, как и ожидалось, если просто указать модель пользователя:

>> User.visible.map(&:username).flatten
=> ["user a", "user b", "user c", "user d"]

Однако, когда я пытаюсь включить модель профиля:

User.visible(:include=> :profiles).profile.map(&:full_name).flatten

яошибка, которая гласит:

NoMethodError: undefined method `profile' for #<User:0x1030bc828>

Могу ли я пересечь границы коллекции моделей таким образом?

1 Ответ

0 голосов
/ 12 июня 2010

Чтобы получить доступ к user profile, вы должны использовать что-то вроде

@user = User.visible(:include => :profiles)
@user.first.profile

Или, если все, что вы хотите - все full_name с, я думаю, вы должны сделать что-то вроде

# untested
User.visible(:include=> :profiles).map(&:profile).collect{ |p| p.full_name }

Но, возможно, есть лучший способ ... Это не выглядит красиво = P

...