为啥在安装 PaperClip 时会出现“未定义的 `has_attached_file` 方法?

Posted

技术标签:

【中文标题】为啥在安装 PaperClip 时会出现“未定义的 `has_attached_file` 方法?【英文标题】:Why do I get an "undefined method for `has_attached_file` when installing PaperClip?为什么在安装 PaperClip 时会出现“未定义的 `has_attached_file` 方法? 【发布时间】:2010-04-18 03:53:44 【问题描述】:

我刚刚安装了 Paperclip 插件,我收到以下错误消息,但我不知道为什么:

NoMethodError (undefined method `has_attached_file' for #<Class:0x10338acd0>):
  /Users/bgadoci/.gem/ruby/1.8/gems/will_paginate-2.3.12/lib/will_paginate/finder.rb:170:in `method_missing'
  app/models/post.rb:2
  app/controllers/posts_controller.rb:50:in `show'

它引用了 will_paginate gem。据我所知,我的PostsController#index 似乎有问题,或者之前尝试安装 gem 而不是插件,在这种情况下,我已经阅读过我应该能够通过/config/environments.rb 进行补救以某种方式归档。

我认为以前的 gem 安装并不重要,因为我在安装插件之前已废弃的旧版本网站中进行了安装。在该站点的当前版本中,我显示该表已在迁移后使用 Paperclip 列进行了更新。这是我的代码:

PostsConroller#show:

  def show
    @post = Post.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml   render :xml => @post 
    end
  end

Post模特:

class Post < ActiveRecord::Base

  has_attached_file :photo
  validates_presence_of :body, :title
  has_many :comments, :dependent => :destroy
  has_many :tags, :dependent => :destroy
  has_many :votes, :dependent => :destroy
  belongs_to :user
  after_create :self_vote
      def self_vote
       # I am assuming you have a user_id field in `posts` and `votes` table.
       self.votes.create(:user => self.user)
      end

  cattr_reader :per_page 
    @@per_page = 10

end

/views/posts/new.html.erb:

<h1>New post</h1>
<%= link_to 'Back', posts_path %>
<% form_for(@post, :html =>  :multipart => true) do |f| %>
  <%= f.error_messages %>

  <p>
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </p>
  <p>
    <%= f.label :body %><br />
    <%= f.text_area :body %>
  </p>
  <p>
    <%= f.file_field :photo %>
  </p>

  <p>
    <%= f.submit 'Create' %>
  </p>
<% end %>

【问题讨论】:

错误来自 PostsController "show" 方法,但是您已经将 "index" 方法和 "new" 视图的内容粘贴到那里?清理您的问题以包含相关信息,并且更有可能有人可以帮助您解决这个问题。 另外,我几乎可以保证最大的线索是错误是引用 Class 而不是 Post。一旦我们看到实际失败的代码,这应该是相当明显的。 刚刚更新了 show 方法。对于那个很抱歉。这一切都是新的。感谢您的指导。 【参考方案1】:

安装新的 gems/plugins 后重启服务器非常重要。这应该可以解决您的问题

【讨论】:

也解决了我的问题,它也与 mongrel 相关......不习惯使用它,所以我想你在更改插件和/或配置时需要重新启动那个坏男孩。跨度> 也必须重新启动我的控制台,重新加载!不起作用。【参考方案2】:

我建议安装回形针 gem。然后您只需将config.gem 'paperclip' 添加到您的environment.rb 并运行sudo rake gems:install

【讨论】:

你好..我正在使用 Rails 2.0.2 和 ruby​​ 1.8.7 n 我仍然面临这个错误..我在 environment.rb 文件中添加了一个需要“回形针”并且我已经安装了回形针 2.3.8 作为我的 activerecord 和 activesupport 是 2.0.2 版本。关于我可以做些什么来解决这个问题的任何建议..?有什么办法可以得到回形针的插件吗? ...作为替代方案,因为我使用的是较旧的 rails 版本 n 插件仍然有效。我听说thoughtbot 已经关闭了他们的 svn 代表,我可以通过 github 以某种方式获取它..?? @boddhisattva 只需像这样更新您的 gemfile:gem 'paperclip', :git => "git://github.com/thoughtbot/paperclip.git" @Gearóid :谢谢,但是当我发布这个问题时,我正在使用 Rails 2.0.x 项目。解决这个问题的方法是我必须找到一个与我正在使用的 Rails 版本兼容的回形针提交。 你真的不应该使用 'sudo' 来安装 gems。【参考方案3】:

在 config/initializers/paperclip.rb 中创建文件 paperclip.rb

添加以下行并重新启动服务器

需要“回形针/铁轨”

回形针::Railtie.insert

【讨论】:

【参考方案4】:

在 Paperclip 运行良好数周后,我在 2 台不同的开发机器上自发地收到此错误。

spring stop

然后需要重新启动我的 rails 控制台

【讨论】:

【参考方案5】:

我想这应该很明显,但我使用 mongo/mongoid 作为我的数据层,需要安装 mongoid paperclip 才能工作。

【讨论】:

以上是关于为啥在安装 PaperClip 时会出现“未定义的 `has_attached_file` 方法?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 pip 在安装 scikit-learn 时会出现权限被拒绝的错误?

NoMethodError:未定义的方法“has_attached_file”

库路径绝对正确,可以创建所述库的实例,但在调用任何函数时会出现“未定义的引用”

为啥我在安装SQL Sever Management Studio2012在功能选择时会出现此页验证有错误?

为啥在将 liblas 链接到 Qt 后出现未定义的参考错误?

使用 Mongoose.js 保存模型时,为啥会出现“无法调用未定义的 doValidate”?