If a user has many things and a thing has many stats, it seems like there’s only way Rails-y way to expose the stats through the user.
class User < ActiveRecord::Base
has_many :things do
def stats
Stat.where(thing_id: proxy_association.owner.things_id)
end
end
end
class Thing < ActiveRecord::Base
belongs_to :user
has_many :stats
end
class Stat < ActiveRecord::Base
belongs_to :thing
has_one :user, through: :thing
end
User.first.things.stats == Stat.where(thing_id: User.first.thing_ids)
I’m trying to determine whether there are any other options… Some people on my team complain that this doesn’t feel natural. I feel like this is the most natural expression of the relationship you could devise.
Does anyone have a better suggestion? I’ll say, I’ve tried instance methods and they don’t smell right.
I might use a has_many :stats, :through => :things in the User class.
Check out this: http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association