Использование атрибутов в методе Model.calculate? - PullRequest
1 голос
/ 26 августа 2009

ОК. Итак, мои модели такие:

Team
  has_many :users, :through => memberships

User
  has_one :user_status

Теперь в моей модели Team я хочу найти максимальное значение 'updated_at' для моих 'user_status' моделей.

Я пытался сделать что-то вроде:

Team
  has_many :users, :through => :memberships
  has_many :user_statuses, :through => :users

  def max_last_updated_status
    user_statuses.maximum(:updated_at)
  end

но это дало мне:

Invalid source reflection macro :has_one for has_many :user_statuses, :through => :users.  Use :source to specify...

Так что мне было интересно, есть ли лучший способ сделать это, могу ли я просто создать свойство модели User, например:

def status_updated_at
  user_status.updated_at
end

и затем измените класс моей команды, чтобы иметь:

  def max_last_updated_status
    user.maximum(:status_updated_at)
  end

? Я предполагаю, что нет, поскольку 'status_updated_at' на самом деле не столбец, и поэтому генерация sql не удастся ...

Еще одна точка зрения на эту проблему будет высоко оценена.

Ответы [ 2 ]

3 голосов
/ 26 августа 2009

Я бы сделал это так:

Команда

has_many :users, :through => memberships

def max_last_updated_status
  users.map{|user| user.user_status.updated_at}.max
end

Пользователь

has_one :user_status

Метод max_last_updated_status должен возвращать максимальное значение updated_at пользователей в команде.

1 голос
/ 26 августа 2009

В своем первоначальном подходе вы пробовали это:

team.users.maximum "user_statuses.updated_at", :include => :user_status
# OR
team.users.maximum "`user_statuses`.updated_at", :include => :user_status

Я пробовал со следующими классами, и все работает отлично:

class User < ActiveRecord::Base
  has_one :user_status
  has_many :memberships
  has_many :teams, :through => :memberships
end


class UserStatus < ActiveRecord::Base
  belongs_to :user
end


class Team < ActiveRecord::Base
  has_many :users, :through => :memberships
  has_many :memberships
end


class Membership < ActiveRecord::Base
  belongs_to :team
  belongs_to :user
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...