问题标签 [ruby-paranoia]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
641 浏览

ruby-on-rails - Rails 5 在 Paranoia 和 CanCanCan 之间的兼容性受到了损害?

我遇到了与此线程中描述的完全相同的问题:

Rails 5 only_deleted with cancancan #356

我可以访问已删除的记录,如下所示:

但如果我添加load_and_authorize_resource到我的控制器,它会尝试像这样运行查询:

这将导致错误,因为它不会在 delete_at 不为空的集合上找到具有该 ID 的记录(不是删除的记录,Paranoia gem 的目的)。

如果我禁用load_and_authorize_resource控制器或该操作,它会解决错误,但它不是解决方案,因为这意味着失去授权控制。

是否有解决此问题的方法,或者是否有一个与 Rails 5 上的偏执狂配合得很好的授权宝石,我可以切换到它?

谢谢你。

0 投票
2 回答
148 浏览

ruby-on-rails - 将acts_as_paranoid 与DelayedJob 一起使用?

有人能准确地告诉我如何整合acts_as_paranoidDelayedJob?我尝试创建一个类Delayed::Backend::ActiveRecord::Job并添加acts_as_paranoid到它,但即使我使用初始化程序和require新类,acts_as_paranoid 似乎也没有做任何事情。

我没有收到任何错误,因此paranoia似乎已正确安装,并且在成功完成后会干净地删除该作业-这当然是我要防止的。

如果没有人读到这篇文章并立即知道我是怎么搞砸的,那么很高兴尝试任何调试建议。

0 投票
1 回答
142 浏览

ruby-on-rails - “创建”不能在 heroku 上使用 ruby​​ 偏执狂

我已经在一个模型(“Stays”)上实现了偏执狂,该模型正在开发中,但不是在 heroku 上的生产中。在 heroku 网站上,我可以看到一个(预计是空的)索引页面,但是当我转到 /stays/new 时,我得到一个错误页面。

检查日志,我发现:

在 app/controllers/stays_controller.rb 中,这里是前 15 行。

在宝石文件中:

在 app/models/stay.rb 中:

自从推到heroku以来,我一直在跑步heroku run rake db:migrate,但没有运气。知道为什么这是在本地进行开发,而不是在 heroku 上进行生产吗?

0 投票
1 回答
401 浏览

ruby-on-rails-5 - 还原递归不会还原连接表中的条目

设置

重现步骤:

  1. 在配置文件上调用destroy方法。
  2. degreeholderships 表中的条目标记为 active=NULL 并且已删除_at=timestamp
  3. 在配置文件上调用恢复方法并通过递归:true
    • profile.restore(递归:真)
  4. degreeholderships 表中的条目保持不变

预期结果:

  • 与个人资料相关的学位持有人条目也应恢复。

我尝试使用和不使用 recursive: true 选项运行恢复,并设置 recovery_window 值。所有显示此行为。我还删除了使用活动列的选项并恢复为使用 deleted_at(默认值)。

我想了解这种行为是否是:

  1. 由于我的设置错误。
  2. 实际上是预期的行为,如果是这样,请解释为什么这比能够递归地恢复依赖项更可取。
  3. 是宝石的错误。
0 投票
1 回答
600 浏览

ruby-on-rails - 递归还原中的偏执狂

我正在使用 paranoia /acts_as_paranoid gem 软删除我的模型。

我在帖子和评论之间有一对多的关系。他们都是偏执狂,并且摧毁一切都按预期进行。

我的关系是这样设置的:

我正在使用acts_as_commentable_with_threading gem 来发表评论。

以下是说明问题的命令示例:

谢谢!

0 投票
3 回答
716 浏览

ruby-on-rails - 与 belongs_to 相关的偏执狂

在我的应用程序中,一个用户has_many :jobs和一个工作belongs_to :user。我正在使用 paranoia gem 软删除用户和作业。

假设我有一个用户 Joe,他有一份工作“推送更改”。我可以使用 来查看我的列表页面上的所有工作Job.all,但是一旦我删除 Joes 的帐户,我就看不到该工作正在使用Job.all了。

我曾尝试使用Job.with_deleted.all并尝试取消关联的范围belongs_to :user, -> { with_deleted }

生成的 SQL 语句:

0 投票
1 回答
1063 浏览

ruby-on-rails - 多列索引 vs 单独索引 vs 部分索引

今天在我的 Rails 应用程序上工作时,我注意到 paranoia gem 说应该更新索引以添加deleted_at IS NOT NULL作为索引创建的位置(github链接)。但是我突然想到,当我确实想要 with_deleted 时,倒置条件不会从索引中受益。

这让我想知道...

我知道这有点迟钝,因为答案显然是“这取决于你需要什么”,但我试图了解多列索引、单独索引和部分索引之间的区别,我的 Web 应用程序由 PostgreSQL 支持。

基本上,我有 2 个要查询的字段:p_id 和 deleted_at。大多数时候我都在查询WHERE p_id=1 AND deleted_at IS NOT NULL- 但有时我只查询WHERE p_id=1。很少,我会WHERE p_id=1 AND deleted_at=1/1/2017

那么,我是不是更好:

  1. 在 p_id 上有一个索引,在 deleted_at 上有一个单独的索引?
  2. 在 p_id 上有一个索引但添加 'where deleted_at IS NOT NULL'?
  3. 在 p_id 和 deleted_at 上有一个组合索引?

注意:也许我应该提到 p_id 当前是对 p.id 的外键引用。这提醒我,在 Postgres 中,外键是否有必要也有索引(或者它们是否获得了从外键约束派生的索引 - 我已经阅读了关于此的相互矛盾的答案)?

0 投票
0 回答
28 浏览

ruby-on-rails - Rails - 2 个用户之间的共享条目 - 独立地为每个用户软删除

我有一个带有 2 个模型的 Rails 5 应用程序:User&Application 用户可以通过应用程序模型应用到另一个用户

当用户 1 到用户 2 创建应用程序时,两个用户都可以在他们的Application#index视图中看到它。

每个用户都可以删除一个应用程序,但这不得影响所涉及的第二个用户的可见性。

例子 :

  • 用户 1 申请用户 2
  • 用户 1 和用户 2 拥有应用程序内部Application#index视图
  • 用户 1 软删除应用程序
  • 用户 1 看不到应用程序Application#index
  • 用户 2 仍然可以在Application#index

处理这种情况的最正确方法是什么?

  • 创建 2 列sender_deleted&并用 date +为索引receiver_deleted填充它们scope {sender_deleted: nil }
  • 在 Application 中为每个用户创建一个条目,然后只检索每个用户的条目?
  • 另一种方式 ?

第二种方式似乎是正确的,但表中唯一不同的信息是删除日期,所以它似乎有点多余。

请注意,我在我的其他模型中使用 Paranoia gem 进行常规软删除,这在第一种解决方案中是不可能的,但在第二种解决方案中是可能的,因为只需要一列来将用户定义为已删除。

0 投票
1 回答
604 浏览

ruby-on-rails - 偏执狂和工厂女孩的软删除

当我在 rspec 中对记录调用 delete 时,它​​们似乎被永久删除。我认为这与工厂女孩有关。有没有办法用偏执狂、工厂女孩、rails 和 rspec 来测试软删除而不做任何侵入性的事情?

0 投票
1 回答
556 浏览

ruby-on-rails - Rails 使用 Paranoia 和 Administrate,有没有办法通过 administrate 为用户删除记录?

我想通过administrate在管理面板上通过偏执狂更改所有已删除的记录。我的问题是我正在寻找一种方法来做这些事情,但直到现在还没有成功

实际上我想要做的是覆盖特定控制器上的 index 方法生成 with Administrate,以便将所有元素(是否删除)作为当前控制器的资源。像这样:

controllers/admin/foo_controller.rb

但是当我从管理面板创建一个 foo 对象并删除它之后。该记录不再显示,我想让它仍然可见,以便管理员可以更改它。

如果有人有意见使这成为可能,那就太好了。

预先感谢您的帮助。