/ Associações polimórficas e não polimórficas no mesmo modelo - rubi sobre trilhos, associações, associações polimórficas

Associações polimórficas e não polimórficas no mesmo modelo - rubi sobre trilhos, associações, associações polimórficas

Eu tenho um modelo de log com uma associação polimórfica e outra associação a um modelo de usuário:

class Log < ActiveRecord::Base
belongs_to :loggable, polymorphic: true
belongs_to :user
end

No meu modelo de usuário, eu tenho um has_many associação ao modelo Log:

class User < ActiveRecord::Base
has_many :logs
end

Eu quero ter outra associação no modelo de usuário da seguinte maneira:

class User < ActiveRecord::Base
has_many :logs
has_many :logs, as: :loggable
end

Mas eu imagino que essas duas associações irão entrar em conflito umas com as outras (eu não sei, não tentei) ...

Então, essa é a abordagem correta para esse problema? Ou há uma maneira melhor de fazer isso?

Respostas:

3 para resposta № 1

Que tal renomear uma de suas associações assim:

class User < ActiveRecord::Base
has_many :user_logs, class_name: "Log"
has_many :logs, as: :loggable
end

Para buscar todos os seus logs associados a determinado usuário, você pode definir o escopo Log modelo como este:

class Log < ActiveRecord::Base
belongs_to :loggable, polymorphic: true
belongs_to :user

scope :for_user, lambda { |user|
where("user_id = :user_id OR (loggable_type = "User" AND loggable_id = :user_id)", user_id: user.id)
}
end