标签: ruby-paranoia

Paranoia Gem - 加入已删除的项目

我正在使用 Paranoia gem,现在正在努力解决这个问题。我需要加入 has_many已删除的项目,但它只返回不删除。我的模型:

class Mailing < ActiveRecord::Base

  acts_as_paranoid

  has_many :mailing_fields
  has_many :fields, through: :mailing_fields

end

class MailingField < ActiveRecord::

  belongs_to :mailing
  belongs_to :field

end

class Field < ActiveRecord::Base

  has_many :mailing_fields, dependent: :destroy
  has_many :mailings, through: :mailing_fields

end
Run Code Online (Sandbox Code Playgroud)

我正在运行的查询应该返回mailings已删除的项目:

Field.joins(:mailings).where('mailings.id = ?', mailing_id)
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails ruby-paranoia

5
推荐指数
2
解决办法
2093
查看次数

独特的约束问题偏执宝石

我有一个 rails 应用程序,我在其中使用了 devise 和 paranoia gems。
我在 postgres db 中有一个用户表,它对电子邮件列进行了唯一验证。我正在使用偏执进行软删除,问题是当我删除用户然后使用已删除用户的电子邮件创建用户时会引发错误PG::UniqueViolation: ERROR
我已经阅读过相关内容,并且知道可以使用 rails 的部分索引功能来解决这个问题。

http://scottsmerchek.com/2015/08/03/taking-the-d-out-of-crud/

https://devcenter.heroku.com/articles/postgresql-indexes#partial-indexes

我该如何实施?
抱歉格式不正确,从手机打字。

postgresql activerecord ruby-on-rails devise ruby-paranoia

5
推荐指数
1
解决办法
1620
查看次数

Rails 5 Paranoia - 如何“显示”已删除的记录?

软删除记录后,我无法在show控制器上的操作上调用它,因为它会查找与记录匹配的记录ID WHERE deleted_at IS NULLL,考虑到宝石的用途,这是正确的,但我仍然希望能够在应用程序内以某种“只读”状态访问它,以便允许用户查看存档并可能恢复它。

如何解决删除范围以便我可以再次访问该对象?

更新1

根据@slowjack2k的建议,我可以使用以下查询访问软删除的记录:

 @area = Area.only_deleted.find(params[:id])
Run Code Online (Sandbox Code Playgroud)

后来由于CanCanCan 的原因 load_and_authorize_resource出现了一个新问题:它尝试调用

 @area = Area.find(params[:id])
Run Code Online (Sandbox Code Playgroud)

忽略only_deleted过滤器,导致错误,因为仅在deleted_at不为空(未删除)的情况下找到选定的id,并禁用授权“修复”它,所以它一定是CanCanCanParanoia之间的问题。

这是一个具有完全相同问题的线程:https ://github.com/rubysherpas/paranoia/issues/356

这是 StackOverflow 上的新问题线程:Paranoia 和 CanCanCan 之间的 Rails 5 兼容性受到损害?

如果找到解决方案,我会再次更新,谢谢。

更新2

问题已解决,解决方案可以在我上面提到的新问题线程中找到。

ruby-on-rails ruby-paranoia

1
推荐指数
1
解决办法
1万
查看次数