4

BrowserCMS 可以“删除”对象,这基本上将 :deleted 属性设置为 true。Paperclip 最初运行以下代码以获取特定类的所有对象:

Person.connection.select_values(Person.send(:construct_finder_sql, :select => 'id'))

这可能会返回 [1, 2, 3]。即使 3 已将 :deleted 设置为 true。Paperclip 然后使用 ActiveRecord 使用之前的 id 列表获取所有 People 对象。不幸的是,BrowserCMS 不会返回标记为已删除的对象,因此 Paperclip 会说“找不到 ID=3 的人”。

如果没有猴子补丁,我不确定从这里去哪里。想法?

4

1 回答 1

1

因此,解决这个问题(很容易变成回形针的叉子)的黑客方法是修改上面的代码以简单地准备好:

Person.all.collect(&:id)

或者

Person.connection.select_values(Person.send(
  :construct_finder_sql,
  :select => 'id',
  :conditions => { :deleted => false }
))

第一个选项只是强制Paperclip 通过Rails 执行查询,这实际上是通过BrowserCMS,因此使用它的约束(即:看不到任何已删除的记录)。第二个选项执行几乎相同的查询,但忽略了 BCMS 删除的记录。

我相信第一个选项是最好的,因为它允许 BCMS 控制查询,所以如果有任何变化,你的猴子补丁不会中断。

于 2010-10-01T04:53:05.263 回答