在Model.calculate方法中使用属性?

时间:2009-08-26 10:17:06

标签: ruby-on-rails database activerecord

好的所以我的模特就像这样:

Team
  has_many :users, :through => memberships

User
  has_one :user_status

现在,在我的团队模型中,我希望能够找到'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

然后将我的Team类更改为:

  def max_last_updated_status
    user.maximum(:status_updated_at)
  end

?我假设不是因为'status_updated_at'不是真正的列,所以sql生成会失败......

非常感谢关于这个问题的另一个观点。

2 个答案:

答案 0 :(得分:3)

我会这样做:

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应该返回团队中用户的max updated_at。

答案 1 :(得分:1)

在你原来的方法中,你试过这个:

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