同一模型上的多态和非多态关联

时间:2013-08-26 14:04:41

标签: ruby-on-rails associations polymorphic-associations

我有一个具有多态关联的Log模型和另一个与User模型的关联:

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

在我的用户模型中,我与Log模型有has_many关联:

class User < ActiveRecord::Base
  has_many :logs
end

我希望在User模型中有另一个关联,如下所示:

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

但我想这两个联想会相互冲突(我不知道,没试过)......

这个问题的正确方法是什么?或者有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

如何重命名这样的一个关联:

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

要获取与给定用户关联的所有日志,您可以在Log模型上设置范围,如下所示:

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
相关问题