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 № 1Que 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