好的所以我的模特就像这样:
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生成会失败......
非常感谢关于这个问题的另一个观点。
答案 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