我刚刚安装了Paperclip并尝试将图标附加到我的模型中。
has_attached_file :icon,
:styles => { :normal => "100x100>", :format => 'png' },
:storage => :s3,
:s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
:url => "/icon/:slug.:extension"
:path => "icon/:slug.:extension"
s3.yml包含我的存储桶名称和两个密钥。
slug interpolation在config / initializers / paperclip.rb中定义为
Paperclip.interpolates('slug') do |attachment, style|
attachment.instance.cached_slug
end
当我拨打game.icon.url时,我收到此错误:
undefined method `icon_file_name' for #<Game:0x4000f50>
我做错了什么?
我在Windows 7 x64上运行rails 3.0.4和ruby 1.9.2,如果它有任何区别。
答案 0 :(得分:7)
您是否为Game模型创建了一个迁移,以便在Paperclip需要的相应字段中添加?来自Github上的Paperclip documentation:
class AddAvatarColumnsToUser < ActiveRecord::Migration
def self.up
add_column :users, :avatar_file_name, :string
add_column :users, :avatar_content_type, :string
add_column :users, :avatar_file_size, :integer
add_column :users, :avatar_updated_at, :datetime
end
def self.down
remove_column :users, :avatar_file_name
remove_column :users, :avatar_content_type
remove_column :users, :avatar_file_size
remove_column :users, :avatar_updated_at
end
end
创建迁移后,您需要运行rake任务来更新数据库:rake db:migrate
答案 1 :(得分:3)
您只需运行 - rails generate paperclip game icon
它会为你生成迁移。
答案 2 :(得分:2)
我犯了同样的错误,忘了添加数据库迁移。
这是一篇关于这样做的好文章 even though it is on Heroku.
您可以像这样运行迁移
创建迁移文件
rails g migration AddAvatarToUser
然后将文件编辑为以下
class AddAvatarToUser < ActiveRecord::Migration
def self.up
add_attachment :users, :avatar
end
def self.down
remove_attachment :users, :avatar
end
end
答案 3 :(得分:0)
我遇到了类似的问题,但是当我在浏览器中运行它时它正在工作,但我的一些测试失败了。你帮我意识到我已经迁移了我的主要开发数据库,但是我没有做过 rake db:migrate test 。一旦我这样做了 - 问题就消失了。