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を経由するため、その制約を使用します(つまり、削除されたレコードは表示されません)。2番目のオプションはほとんど同じクエリを実行しますが、BCMSで削除されたレコードを除外します。

BCMSがクエリを制御できるため、最初のオプションが最適であると思います。そのため、何かが変更されても、モンキーパッチが壊れることはありません。

于 2010-10-01T04:53:05.263 に答える