Paperclip将文件保存到文件系统,但不保存到model / db

时间:2013-08-30 19:52:27

标签: ruby-on-rails ruby paperclip

更新

非常确定我的问题是由于某些错误导致我不能在我的issue.rb模型中使用带有主attr_accesible: cover的回形针。

我收到此错误:

Issue model missing required attr_accessor for 'cover_file_name'

所以这是由于mass_assignment的安全性变化而导致的某种回形针错误?

原始问题

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

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

相关代码:

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

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

/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。

2 个答案:

答案 0 :(得分:1)

因此,最终原因是数据库中列的名称与模型中使用的名称不同。不知何故,我在迁移中有cover_image并在模型中覆盖。故事的道德,如果你遇到这个问题,请确保首先检查列名

答案 1 :(得分:0)

检查你的params散列,但我认为你从表单中获得的内容只是cover。所以使用:

attr_accessible :cover

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