Раскрытие ассоциаций has_many -> has_many через родительский элемент?

#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. дох! … Я думал, что попробовал это, и это не удалось. Думаю, нет :/