我有一个附带文件的图像模型:照片,我正在尝试使用控制台将本地文件保存到照片中。
我的图像模型:
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。
任何帮助都会受到赞赏,因为我一直在搜索没有找到其他人这个问题!
由于
答案 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
。