Why do I get an "undefined method for `has_attached_file` when installing PaperClip?

Ruby on-RailsRubyPaperclip

Ruby on-Rails Problem Overview


I just installed the plugin for Paperclip and I am getting the following error message but I am not sure why:

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'

It is referencing the will_paginate gem. From what I can find, it seems that either there is something wrong with my PostsController#index or perhaps a previously attempt at installing the gem instead of the plugin, in which case I have read I should be able to remedy through the /config/environments.rb file somehow.

I didn't think that previous gem installation would matter as I did it in an old version of the site that I trashed before installing the plugin. In the current version of the site I show that the table has been updated with the Paperclip columns after migration. Here is my code:

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 model:

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 %>

Ruby on-Rails Solutions


Solution 1 - Ruby on-Rails

It is very important that you restart your server after installing new gems/plugins. This should solve your problem

Solution 2 - Ruby on-Rails

I'd suggest installing paperclip gem. Then you'd just need to add config.gem 'paperclip' to your environment.rb and run sudo rake gems:install.

Solution 3 - Ruby on-Rails

create the file paperclip.rb inside the config/initializers/paperclip.rb

Add the below lines and restart the server

require "paperclip/railtie"

Paperclip::Railtie.insert

Solution 4 - Ruby on-Rails

I got this error spontaneously on 2 different dev machines after Paperclip was working fine for weeks.

spring stop

then restarted my rails console was needed

Solution 5 - Ruby on-Rails

I guess this should have been obvious, but I'm using mongo/mongoid as my data layer and needed to install mongoid paperclip for it to work.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionbgadociView Question on Stackoverflow
Solution 1 - Ruby on-RailsRaunakView Answer on Stackoverflow
Solution 2 - Ruby on-RailsEimantasView Answer on Stackoverflow
Solution 3 - Ruby on-Railskoteshwarrao RavulapallyView Answer on Stackoverflow
Solution 4 - Ruby on-Railschris finneView Answer on Stackoverflow
Solution 5 - Ruby on-RailsTheRightChoyceView Answer on Stackoverflow