回形针将文件保存到文件系统但不保存到模型/数据库

Posted

技术标签:

【中文标题】回形针将文件保存到文件系统但不保存到模型/数据库【英文标题】:Paperclip saving files to filesystem but not to model / db 【发布时间】:2013-08-30 19:52:26 【问题描述】:

更新

很确定我的问题是由一些错误引起的,它不允许我在 issue.rb 模型中仅使用带有主要 attr_accesible: cover 的回形针。

我收到此错误:

Issue model missing required attr_accessor for 'cover_file_name'

所以这可能是由于 mass_assignment 的安全更改导致的某种回形针错误??

原来的问题

我有一个带有 Paperclip 3(Gemfile.lock 中的 3.4.2)的新 rails 项目(3.2.13)。我正在尝试通过问题模型中的回形针上传文件。它们保存到文件系统,但不保存到对象或数据库。

我已经尝试了所有尝试保存这些的组合(我认为)。

相关代码:

issues_controller.rb

  def create
    @issue = Issue.new
    @issue.attributes = params[:issue]    
    respond_to do |format|
      if @issue.save
        format.html  redirect_to @issue, notice: 'Issue was successfully created.' 
        format.json  render json: @issue, status: :created, location: @issue 
      else
        format.html  render action: "new" 
        format.json  render json: @issue.errors, status: :unprocessable_entity 
      end
    end
  end

表格:

<%= form_for @issue, :multipart => true, :method => :post do |f|  %>
....
<%= f.file_field :cover %>

型号:

class Issue < ActiveRecord::Base
  has_many :pages
  attr_accessible :number, :name, :cover
  has_attached_file :cover, :styles =>  :medium => "300x300>", :default_url => "/images/:style/missing.png"

  attr_accessor :cover_file_name, :cover_content_type, :cover_file_size, :cover_updated_at

  validates_attachment :cover, :presence => true

end

我想我已经查看了有关 *** 的所有其他回形针问题建议。 ImageMagick 正在运行并且是最新的。保存时我没有收到任何错误,并且文件在文件系统中正确显示。我的调试语句输出显示文件名并说:

/system/issues/covers//original/image_name.jpg?1377891456
[paperclip] Saving attachments.

但也显示 DB 值的空值:

  SQL (1.4ms)  INSERT INTO `issues` (`cover_image_content_type`, `cover_image_file_name`, `cover_image_file_size`, `cover_image_updated_at`, `created_at`, `name`, `number`, `updated_at`) VALUES (NULL, NULL, NULL, NULL, '2013-08-30 19:49:54', 'Test', 'JPEG 30', '2013-08-30 19:49:54')

想法?建议? TIA。

【问题讨论】:

为什么要手动添加所有回形针方法?并创建附件? 删除@issue.cover = params[:issue][:cover],回形针为你做了这些花哨的东西。 这是在调试时添加的,但它没有为我保存。我会尝试再次删除它。 @AndrewWei 删除手动调用(我将在上面更新)有同样的问题。 @issue.attributes = params[:issue] 现在是电话。以前是Issue.new(params[:issue]) 和同样的问题。 @DaveNewton 添加到模型的 attr_accessors 中,因为尝试保存时出错。再次尝试删除并再次出现错误。 【参考方案1】:

所以最终的原因是数据库中列的名称与模型中使用的名称不同。不知何故,我在迁移中有cover_image,在模型中有cover。故事的寓意,如果您对此感到困惑,请确保首先检查列名

【讨论】:

【参考方案2】:

检查您的参数哈希,但我认为您从表单中得到的只是cover。所以使用:

attr_accessible :cover

而不是所有的列名。 Paperclip 在内部设置这些属性,而不是通过批量分配。

【讨论】:

我手动添加了这些访问器,因为我收到了这个错误:Issue model missing required attr_accessor for 'cover_file_name' 刚刚尝试删除它们,但每一个都出现相同的错误。封面位于 issue.rb 中的 attr_accessible 和其他字段中。 attr_accessible :number, :name, :cover

以上是关于回形针将文件保存到文件系统但不保存到模型/数据库的主要内容,如果未能解决你的问题,请参考以下文章

Rails:回形针不将图像保存到数据库

Rails 4 Paperclip with Devise,文件保存错误

如何在 Rails 中使用 Paperclip 将文件系统中的图像添加到模型中?

每小时将推文保存到单个 Flume 数据文件的 flume.conf 参数应该是啥?

上传图片 - Nodejs Paperclip 和 S3

将 HTML5 文本区域内容保存到文件