1

我正在尝试将标签添加到 RefineryCMS 中的图像模型(尝试 1.0.8 和 2.0.4),添加了 attr_accessible :tag_list,需要作为可标记并设置视图,但问题是标签只有在编辑/更新以前上传的图像时保存 - 不是在第一次上传时保存,即使它使用相同的形式......

有任何想法吗?

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

查看日志时,标签会在帖子中通过,只是没有保存......

4

1 回答 1

1

我遇到了类似的问题,最终找到了额外属性(在您的情况下为 :tag_list)未保存在新图像上传的原因。

如果您看一下,::Refinery::ImageController您会发现 create 操作实际上是通过以下方式创建图像:

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中的“扩展控制器” )

于 2012-08-10T08:48:24.270 回答