1

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

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

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

class User < ActiveRecord::Base
  has_many :logs
end

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

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

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

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

4

1 回答 1

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
于 2013-08-26T14:07:02.403 回答