Я знаю, что на это есть много ресурсов, но мне трудно связать любой из них с моей ситуацией, поэтому я надеялся, что кто-нибудь сможет помочь мне прояснить, как это работает:
В основном у меня есть модель Action
(которая создается каждый раз, когда пользователь делает что-то, что влияет на другого пользователя, например, комментируя его статью или голосуя за чью-то фотографию), эти действия будут перечислены на панели пользователя. страница как все действия, которые имеют к ним отношение, как поток ... вроде как "лента новостей" Github

Я решил заняться созданием полиморфной ассоциации, вот как выглядит моя модель:
class Action < ActiveRecord::Base
belongs_to :instigator, :polymorphic => true
belongs_to :victim, :polymorphic => true
end
Я использовал зачинщика и жертву, потому что каждый может создать эти действия, которые в свою очередь всегда влияют на другого пользователя, вот моя User
модель
class User < ActiveRecord::Base
has_many :actions, :as => :instigator
has_many :actions, :as => :victim
end
И именно здесь Я думаю Я иду не так, потому что в конечном итоге я хочу получить запрос, который, когда я запускаю что-то вроде User.find(1).actions
, фактически возвращает все экземпляры, в которых пользователь одновременно instigator
или victim
, я думаю, что у меня не может быть обоих этих have_many
, потому что при таком использовании я получаю только те случаи, когда пользователь является victim
.
Вот моя миграция:
create_table :actions do |t|
t.references :instigator, :polymorphic => true
t.references :victim, :polymorphic => true
t.string :action_performed
t.references :resource, :polymorphic => true
t.timestamps
end
Спасибо за любую помощь, мне всегда нравятся отличные предложения и помощь, которую предоставляет SO-сообщество.