Paperclip - 未定义的方法'icon_file_name'

时间:2011-02-28 23:24:44

标签: ruby-on-rails-3 amazon-s3 paperclip attachment

我刚刚安装了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,如果它有任何区别。

4 个答案:

答案 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 。一旦我这样做了 - 问题就消失了。