当前位置: 首页 > 知识库问答 >
问题:

Rails RMagick输出载波

商业
2023-03-14

我正在使用RMagick gem制作一个rails应用程序,将图像转换为动画gif。有< code>Post模型,其中< code >有_many post_attachments和< code >有_one post_output。这个想法是用户可以上传多张图片,然后重定向到一个带有动画gif的页面。我在通过carrierwave、AWS S3和fog将gif附加到post_output(它有一个名为‘output’的属性)时遇到了问题。

posts_controller.rb

def create
  @post = Post.new(post_params)

  if @post.save
    @post_attachments = params[:post_attachments][:image].map do |attachment|
      @post.post_attachments.create!(image: attachment)
    end

    images = @post_attachments.map { |attachment| attachment.image.url  }
    gif = Magick::ImageList.new(*images)
    gif.to_blob
    gif.delay = 20
    filename = "#{@post.title}.gif"
    gif.write(filename)

    binding.pry
    @post.post_output.create!(output: gif)


    flash.now[:success] = "Post was succesfully created!"
    redirect_to @post

  else
    flash.now[:danger] = "Something went wrong. Try again. :("
    render 'new'
  end
end

def post_params
    params.require(:post).permit(:title,
    post_attachments_attributes: [:id, :post_id, :image],
    post_output_attributes: [:id, :post_id, :output])
end

后.rb

class Post < ActiveRecord::Base
  has_many :post_attachments, dependent: :destroy
  has_one :post_output,     dependent: :destroy
  accepts_nested_attributes_for :post_attachments
  accepts_nested_attributes_for :post_output

  validates :title, presence: true
end  

post_output.rb

class PostOutput < ActiveRecord::Base
  belongs_to :post
  mount_uploader :output, OutputGifUploader

  validates :output, presence: true
end  

output_gif_uploader.rb

class OutputGifUploader < CarrierWave::Uploader::Base

  include CarrierWave::RMagick

  storage :fog

  def store_dir
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

end

这是日志和错误:

于2015-07-27 17:56:32-0400由PostsController#创建为HTML参数:{“utf8”=

< code>NameError(未初始化的常量Post::Post outputs):app/controllers/posts _ controller . Rb:22:in create ' `中

渲染/Users/AYL/.rvm/rubies/ruby-2.1.5/lib/ruby/gems/2.1.0/gems/actionpack-4.2.0/lib/action_dispatch/middleware/templates/rescues/_source。erb(8.3ms)渲染/Users/AYL/.rvm/rubies/ruby-2.1.5/lib/ruby/gems/2.1.0/gems/actionpack-4.2.0/lib/action_dispatch/midleware/templates/rescues/_trace.html。erb(4.2ms)渲染/Users/AYL/.rvm/rubies/ruby-2.1.5/lib/ruby/gems/2.1.0/gems/actionpack-4.2.0/lib/action_dispatch/midleware/templates/rescues/_request_and_response.html。erb(1.8ms)渲染/Users/AYL/.rvm/rubies/ruby-2.1.5/lib/ruby/gems/2.1.0/gems/actionpack-4.2.0/lib/action_dispatch/middleware/templates/suces/diagnostics.html。救援/布局中的erb(33.1ms)无法呈现内容类型为multipart/form data的控制台允许的内容类型:[##

做这件事的正确方法是什么?

共有1个答案

夹谷成龙
2023-03-14

解决方案
posts_controller.rb做
@post.create_post_output!(输出:File.open(文件名))
而不是
@post.post_output.create!(输出:gif)

 类似资料:
  • C++ 重载运算符和重载函数 C++ 能够使用流提取运算符 >> 和流插入运算符 << 来输入和输出内置的数据类型。您可以重载流提取运算符和流插入运算符来操作对象等用户自定义的数据类型。 在这里,有一点很重要,我们需要把运算符重载函数声明为类的友元函数,这样我们就能不用创建对象而直接调用函数。 下面的实例演示了如何重载提取运算符 >> 和插入运算符 <<。#include <iostream> u

  • 我有一个API,它正在被扩展,以供另一个系统使用。存在Pre-req,每个前端对一个json字段有不同的期望。 示例:响应字段“amount”必须是字符串或int,这取决于我从下游接收的值。因此,在某些情况下,我将在json中返回字符串值,而在其他情况下,我将返回int。 预期的json产出: 或 我已经做了以下工作: 我希望能够为json字段“amount”返回int或String值,但出现以下

  • 文件 std::fs::File 本身实现了 Read 和 Write trait,所以文件的输入输出非常简单,只要得到一个 File 类型实例就可以调用读写接口进行文件输入与输出操作了。而要得到 File 就得让操作系统打开(open)或新建(create)一个文件。还是拿例子来说明 use std::io; use std::io::prelude::*; use std::fs::File;

  • 回顾一下我们写的第一个 Rust 程序就是带副作用的,其副作用就是向标准输出(stdout),通常是终端或屏幕,输出了 Hello, World! 让屏幕上这几个字符的地方点亮起来。println! 宏是最常见的输出,用宏来做输出的还有 print!,两者都是向标准输出(stdout)输出,两者的区别也一眼就能看出。至于格式化输出,基础运算符和字符串格式化小节有详细说明,这里就不再啰嗦了。 更通用

  • Boost.Assign Assign帮助你把一系列的值赋给容器。它通过对operator, (逗号操作符) and operator()() (函数调用操作符)的重载,带给用户一种数据赋值的很容易的方法。除了对原型风格的代码特别有用,这个库的功能在其它时候也很有用,使用这个库有助于提高代码的可读性。使用本库中的list_of还可以就地生成无名数组。 Assign 的作者是 Thorsten Ot

  • 简介 通过前面章节的学习,你已经可以在Scheme的交互式前端中编写并执行程序了。在本章中,我讲介绍如何输入和输出。使用这个特性,你可以从文件中读取数据或向文件中写入数据。 从文件输入 open-input-file,read-char和eof-object? 函数(open-input-file filename)可以用于打开一个文件。此函数返回一个用于输入的端口。函数(read-char po