1

Paperclip 能够成功上传图像(它被上传到服务器上的相应文件夹)。但是,当我尝试查看图像时,它报告它丢失。

模型/照片.rb:

class Photo < ActiveRecord::Base
attr_accessible :image
attr_accessor :image_file_name, :image_file_size, :image_updated_at
has_attached_file :image, styles: {small: "300x300>" },
url  "/photos/:id/:style/:basename.:extension",
path: ":rails_root/public/photos/:id/:style/:basename.:extension" 


validates_attachment_presence :image
validates_attachment_size :image, less_than: 5.megabytes
end

查看图片:(photos/show.html.erb):

<% if @photo.image? %>
    <%= image_tag @photo.image.url(:small) %>
<% else %>
    Missing image <%= @photo.id %>
<% end %>

这会输出带有正确照片 ID 的“缺失图像”。

尽管如此,上传的照片仍存储在正确的路径中,并且可以通过正确的 url 访问,例如

 http://localhost:3000/photos/1/small/1351546785_accepted_48.png
4

2 回答 2

0

事实证明,问题在于 image_file_name 在数据库中存储为 nil 。

attr_accessor :image_file_name 阻止 image_file_name 具有适当的值,因此必须将其删除。我添加了这一行,因为一个错误使它看起来是必需的。为了摆脱错误,数据库迁移必须更新为:

def change
  create_table :photos do |t|
    t.string :image_file_name
    t.string :image_content_type
    t.integer :image_file_size
    t.datetime :image_updated_at

    t.timestamps
  end
end
于 2012-11-06T05:14:24.890 回答
0

我有同样的问题,我的解决方案是这样的:

默认情况下,您生成的控制器要添加 :photo 属性来定义“创建”,如下所示:

def create
    @setting = Setting.new(setting_params)
end

只需将其更改为:

def create
    @setting = Setting.create(params[:setting])
end

(为了清楚起见;将设置更改为您自己的脚手架名称。)

于 2013-09-11T13:08:21.397 回答