2012-05-17 1 views
1

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

Любые идеи?

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

Теги проходят в посте, если смотреть на журналы, просто не спасает ...

ответ

1

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

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

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] является массивом когда несколько uploed несколько файлов включены (по умолчанию она находится). Но тогда действие использует только значения массива при создании изображений, игнорируя другие параметры.

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

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, чтобы скопировать и отредактировать действие create в нем. (см. «Расширение контроллера» в Refinery's Guides)