2010-08-24 3 views
4

BrowserCMS может «удалять» объекты, которые в основном устанавливают атрибут: deleted в true. Скрепка запускает следующий код сначала получить все объекты определенного класса:BrowserCMS и Paperclip

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

Это может вернуться [1, 2, 3]. Даже если, скажем, 3: удалено, установлено значение true. Затем Paperclip использует ActiveRecord для получения всех объектов People, используя предыдущий список идентификаторов. К сожалению, BrowserCMS не возвращает объекты, помеченные как удаленные, поэтому Paperclip угасает: «Не удалось найти Person with ID = 3».

Я не уверен, куда идти отсюда без патча обезьяны. Мысли?

ответ

1

Таким образом, Hacky способ разрешения этого (который может легко превратиться в вилке скрепку), чтобы изменить код выше просто готов:

Person.all.collect(&:id) 

или

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

Первый опция просто заставляет Paperclip выполнять запрос через Rails, который, по сути, проходит через BrowserCMS, тем самым используя свои ограничения (т. е. не видя каких-либо удаленных записей). Второй вариант делает почти тот же запрос, но не содержит записей, удаленных BCMS.

Я считаю, что первый вариант лучше всего, поскольку он позволяет BCMS контролировать запрос, поэтому, если что-то изменится, ваш патч обезьяны не сломается.