#ruby-on-rails #activerecord #associations #has-many
#ruby-on-rails #activerecord #ассоциации #имеет-много
Вопрос:
Если у пользователя много вещей, а у вещи много статистики, похоже, что есть только Rails-способ предоставить статистику через пользователя.
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)
Я пытаюсь определить, есть ли какие-либо другие варианты… Некоторые люди в моей команде жалуются, что это не кажется естественным. Я чувствую, что это наиболее естественное выражение отношений, которые вы могли бы придумать.
У кого-нибудь есть лучшее предложение? Я скажу, я пробовал методы экземпляра, и они не пахнут правильно.
Ответ №1:
Я мог бы использовать has_many :stats, :through => :things в классе User .
Проверьте это: http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association
Комментарии:
1. дох! … Я думал, что попробовал это, и это не удалось. Думаю, нет :/