Ruby on rails 3 通过Rails 3中的多态关系获取偏执狂删除的对象
我有一个Audit类,用于存储操作、by和on属性Ruby on rails 3 通过Rails 3中的多态关系获取偏执狂删除的对象,ruby-on-rails-3,polymorphic-associations,soft-delete,Ruby On Rails 3,Polymorphic Associations,Soft Delete,我有一个Audit类,用于存储操作、by和on属性 class Audit < ActiveRecord::Base attr_accessible :activity belongs_to :by, :polymorphic => true belongs_to :on, :polymorphic => true attr_accessible :by, :on end 我遇到的问题来自于所有被审计的对象都在使用paranoia gem。paranoia g
class Audit < ActiveRecord::Base
attr_accessible :activity
belongs_to :by, :polymorphic => true
belongs_to :on, :polymorphic => true
attr_accessible :by, :on
end
我遇到的问题来自于所有被审计的对象都在使用paranoia gem。paranoia gem在每个models表中引入了一个deleted_at列,该列通过其默认_作用域(设置为“where(deleted_at为null)”)对该模型上的每个查询进行检查。paranoia gem还提供了一种方法。with_deleted允许通过打开默认_作用域进行直接查询,因此还返回已被paranoid/soft deleted的对象
但是,如果我有任何已删除的项目,并且我尝试使用列出所有已审核的项目
Audit.all
我不知道如何告诉Rails为添加.with_deleted调用的每个多态:by and:on对象运行查找查询。我的猜测是rails通过
eval(type).find(id)
在我的例子中,它会给我一个对象,这个对象应用了paranoia gem的默认范围
我试图在审计中通过sql重写self.find\u,但没有成功。我陷入了一些Arel方法中,在我继续之前,我需要更多地阅读这些方法
我看到了以下解决方案,但我不知道如何实现它们
def on!
if on_type && on_id
on_type.constantize.with_deleted.find(on_id)
end
end
如果记录已被真正删除,这将引发ActiveRecord::RecordNotFound错误,否则即使标记为已删除,也将返回“on”对象
def on!
if on_type && on_id
on_type.constantize.with_deleted.find(on_id)
end
end