我有一个具有多态关联的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
但我想这两个联想会相互冲突(我不知道,没试过)......
这个问题的正确方法是什么?或者有更好的方法吗?
答案 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