web-dev-qa-db-fra.com

Pourquoi ai-je une "méthode non définie" pour `has_attached_file` lors de l'installation de PaperClip?

Je viens d'installer le plug-in pour Paperclip et j'obtiens le message d'erreur suivant, mais je ne sais pas pourquoi:

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'

Il fait référence à la gem will_paginate. D'après ce que je peux trouver, il semble qu'il y ait un problème avec mon PostsController#index ou peut-être une tentative antérieure d'installation de la gemme à la place du plug-in. Dans ce cas, j'ai lu que je devrais pouvoir remédier par le biais du fichier /config/environments.rb

Je ne pensais pas que l'installation de la gemme précédente aurait de l'importance, comme je l'avais fait dans une ancienne version du site que j'avais détruite avant d'installer le plugin. Dans la version actuelle du site, je montre que la table a été mise à jour avec les colonnes de Paperclip après la migration. Voici mon 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

modèle 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 %>
50
bgadoci

Il est très important que vous redémarriez votre serveur après avoir installé de nouveaux plugins/gems. Cela devrait résoudre votre problème

176
Raunak

Je suggèrerais d'installer Paperclip gem. Ensuite, il vous suffira d’ajouter config.gem 'Paperclip' à votre environment.rb et d’exécuter Sudo rake gems:install.

8
Eimantas

J'ai eu cette erreur spontanément sur 2 machines de développement différentes après que Paperclip ait fonctionné correctement pendant des semaines.

spring stop

puis redémarré ma console Rails était nécessaire

1
chris finne

créer le fichier Paperclip.rb dans config/initializers/Paperclip.rb

Ajoutez les lignes ci-dessous et redémarrez le serveur

nécessite "trombone/rail"

Paperclip :: Railtie.insert

1
kotesh

Je suppose que cela aurait dû être évident, mais j'utilise mongo/mongoid comme couche de données et je dois installer mongoid Paperclip pour que cela fonctionne. 

0
TheRightChoyce