无法使用Rails 3和paperclip将本地文件保存到数据库中

时间:2011-04-06 05:20:34

标签: ruby-on-rails database file-upload paperclip

我有一个附带文件的图像模型:照片,我正在尝试使用控制台将本地文件保存到照片中。

我的图像模型:

class Image < ActiveRecord::Base
 has_attached_file :photo
 attr_accessor :photo_file_name
 belongs_to :item
end

我的图片迁移:

class CreateImages < ActiveRecord::Migration
  def self.up
   create_table :images do |t|
   t.string :photo_file_name
   t.string :photo_content_type
   t.integer :photo_file_size
   t.datetime :photo_updated_at
   t.timestamps
 end
end

def self.down
 drop_table :images
end
end

在控制台:

a=Image.new
 => #<Image id: nil, file_name: nil, content_type: nil, file_size: nil, created_at: nil, updated_at: nil, item_id: nil> 

a.photo=File.new('/home/bobloblaw/Pictures/nomnom.jpg')
 => #<File:/home/bobloblaw/Pictures/nomnom.jpg> 

a.save
 => true 

a.photo
 => /system/photos/2/original/nomnom.jpg?1302065614 

Image.first.photo
 => /photos/original/missing.png 

因此,正如您所看到的,a.photo包含正确的信息,但不知何故未将其正确保存到实际数据库中的Image中。我还尝试了各种组合,例如:photo和:photo_file_name到attr_accessible。

任何帮助都会受到赞赏,因为我一直在搜索没有找到其他人这个问题!

由于

5 个答案:

答案 0 :(得分:1)

只需替换

attr_accessor :photo_file_name

attr_accessor :photo

答案 1 :(得分:0)

您确定Image.first正在返回您刚刚创建的此记录吗?仔细检查它是否包含正确的photo_*字段。

答案 2 :(得分:0)

你必须提供:url和:path ..

像这样

has_attached_file:accountlogo,

                :storage => :s3,
                :s3_credentials => "#{RAILS_ROOT}/config/amazon_s3.yml",
                :url  => "/accountslogo/:id/:basename.:extension",
                :path => "/accountslogo/:id/:basename.:extension"
                # :path => ":rails_root/public/accountslogo/:id/:basename.:extension"

答案 3 :(得分:0)

尝试从模型定义中删除。此访问者将自动创建。

attr_accessor :photo_file_name

答案 4 :(得分:0)

尝试File.read,而不是File.new