Добавление тегов к изображениям в RefineryCMS

Я пытаюсь добавить теги в модель изображения в RefineryCMS (пробую на 1.0.8 и 2.0.4), добавил attr_accessible :tag_list, требуемые действия как теги и настройку представлений, но проблема в том, что теги только сохранить при редактировании/обновлении ранее загруженного изображения, а не при первой загрузке, даже если оно использует ту же форму...

Любые идеи?

Это происходит на каждой версии рельсов и Refinery, которые я пробовал...

Теги просматриваются в посте при просмотре логов, просто не сохраняются...


person Chris Edwards    schedule 17.05.2012    source источник


Ответы (1)


У меня была аналогичная проблема, и в конце концов я нашел причину того, что дополнительные атрибуты (в вашем случае: tag_list) не сохраняются при загрузке нового изображения.

Если вы посмотрите на ::Refinery::ImageController вы увидите, что действие создания фактически создает изображение с помощью:

unless params[:image].present? and params[:image][:image].is_a?(Array)
    @images << (@image = ::Refinery::Image.create(params[:image]))
else
    params[:image][:image].each do |image|
        @images << (@image = ::Refinery::Image.create(:image => image))
    end
end 

params[:image][:image] — это массив, когда включена загрузка нескольких файлов (по умолчанию). Но тогда действие использует только значения массива при создании изображений, игнорируя другие параметры.

Я быстро пишу приведенный ниже обходной путь, который позволяет сохранить другие параметры при загрузке нескольких изображений:

unless params[:image].present? and params[:image][:image].is_a?(Array)
    @images << (@image = ::Refinery::Image.create(params[:image]))
else
    images_params = params[:image].dup
    images_params.delete(:image)
    params[:image][:image].each do |image|
        @images << (@image = ::Refinery::Image.create({:image => image}.merge(images_params)))
    end

конец

Это, вероятно, не самое элегантное решение, но оно помогает.

Чтобы использовать его в своем приложении, вам нужно создать декоратор для ::Refinery::ImageController, чтобы копировать и редактировать действие создания в нем. (см. «Расширение контроллера» в Руководствах Refinery)

person LapinLove404    schedule 10.08.2012