53 votes

Pourquoi est-ce que j'obtiens un message "undefined method for `has_attached_file`" lors de l'installation de PaperClip ?

Je viens d'installer le plugin pour Paperclip et je reçois 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 gemme will_paginate. D'après ce que je peux trouver, il semble que soit il y a quelque chose de mal avec mon PostsController#index ou peut-être une tentative antérieure d'installation de la gemme au lieu du plugin, auquel cas j'ai lu que je devrais pouvoir y remédier par l'intermédiaire de l'interface de l'utilisateur. /config/environments.rb d'une manière ou d'une autre.

Je ne pensais pas que l'installation précédente des gemmes aurait de l'importance, car je l'ai fait dans une ancienne version du site que j'ai mise à la poubelle avant d'installer le plugin. Dans la version actuelle du site, je montre que le tableau a été mis à jour avec les colonnes 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

Post modèle :

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

0 votes

L'erreur provient de la méthode "show" du PostsController, mais vous avez collé la méthode "index" et le contenu de la vue "new" ? Nettoyez votre question pour inclure les informations pertinentes, et il est plus probable que quelqu'un puisse vous aider à résoudre ce problème.

1 votes

De plus, je peux presque garantir que le plus gros indice est le fait que l'erreur fait référence à Class et non à Post. Cela devrait être assez évident une fois que nous aurons vu le code réel qui échoue.

0 votes

Juste mis à jour pour la méthode du spectacle. Je m'en excuse. Je suis nouveau dans tout ça. Merci pour les conseils.

183voto

Raunak Points 2987

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

0 votes

J'ai également résolu mon problème avec mongrel... je n'ai pas l'habitude de l'utiliser donc je suppose que vous devez redémarrer ce mauvais garçon souvent lorsque vous changez de plugins et/ou de configurations.

0 votes

J'ai dû redémarrer ma console aussi, reload ! ne fonctionne pas.

8voto

Eimantas Points 29052

Je vous suggère d'installer la gemme paperclip. Il vous suffira alors d'ajouter config.gem 'paperclip' à votre environnement.rb et exécutez sudo rake gems:install .

0 votes

Bonjour... J'utilise Rails 2.0.2 et ruby 1.8.7 et je suis toujours confronté à cette erreur... J'ai ajouté un require "paperclip" dans mon fichier environment.rb et j'ai installé paperclip 2.3.8 comme mon activeecord et activesupport est de la version 2.0.2. Avez-vous des suggestions sur ce que je peux faire pour résoudre ce problème ? Y a-t-il un moyen d'obtenir le plugin pour paperclip ? ...comme alternative, car j'utilise une ancienne version de rails et les plugins fonctionnent toujours. J'ai entendu dire que thoughtbot a fermé son représentant svn, puis-je l'obtenir d'une manière ou d'une autre via github... ?

0 votes

@boddhisattva mettez juste à jour votre gemfile comme ceci : gem 'paperclip', :git => "git://github.com/thoughtbot/paperclip.git".

0 votes

@Gearóid : Merci, mais j'étais sur un projet Rails 2.0.x lorsque j'ai posté cette question. Le contournement qui a fait l'affaire pour moi était que je devais trouver un commit paperclip compatible avec la version de Rails sur laquelle j'étais.

2voto

Créer le fichier paperclip.rb à l'intérieur du fichier config/initializers/paperclip.rb

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

nécessite "paperclip/railtie".

Paperclip::Railtie.insert

1voto

chris finne Points 902

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

0voto

Thechoyce Points 1805

Je suppose que cela aurait dû être évident, mais j'utilise mongo/mongoid comme couche de données et j'ai dû installer trombone mongol pour qu'il fonctionne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X