我正在尝试将标签添加到 RefineryCMS 中的图像模型(尝试 1.0.8 和 2.0.4),添加了 attr_accessible :tag_list,需要作为可标记并设置视图,但问题是标签只有在编辑/更新以前上传的图像时保存 - 不是在第一次上传时保存,即使它使用相同的形式......
有任何想法吗?
它发生在我尝试过的每个版本的 Rails 和 Refinery 上......
查看日志时,标签会在帖子中通过,只是没有保存......
我正在尝试将标签添加到 RefineryCMS 中的图像模型(尝试 1.0.8 和 2.0.4),添加了 attr_accessible :tag_list,需要作为可标记并设置视图,但问题是标签只有在编辑/更新以前上传的图像时保存 - 不是在第一次上传时保存,即使它使用相同的形式......
有任何想法吗?
它发生在我尝试过的每个版本的 Rails 和 Refinery 上......
查看日志时,标签会在帖子中通过,只是没有保存......
我遇到了类似的问题,最终找到了额外属性(在您的情况下为 :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中的“扩展控制器” )