在RefineryCMS中为图像添加标签

时间:2012-05-17 16:16:51

标签: ruby-on-rails ruby ruby-on-rails-3 refinerycms

我正在尝试将标签添加到RefineryCMS中的Image模型(尝试1.0.8和2.0.4),添加了attr_accessible:tag_list,需要act-as-taggable并设置视图,但问题是标签仅在编辑/更新以前上传的图像时保存 - 而不是在第一次上传时,即使它使用相同的表格...

有什么想法吗?

它发生在我试过的每个版本的rails和Refinery上......

标签在查看日志时会在帖子中进行,只是不保存...

1 个答案:

答案 0 :(得分: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's Guides中的'扩展控制器')