2010-04-18 5 views
49

Właśnie zainstalowałem wtyczkę do spinacza i otrzymuję następujący komunikat o błędzie, ale nie jestem pewien, dlaczego?Dlaczego uzyskać „niezdefiniowanej metody` has_attached_file` podczas instalowania spinacza

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' 

Jest odwołuję się do woli_przypominać klejnot. Z tego, co mogę znaleźć, wynika, że ​​albo coś jest nie tak z moją PostsController#index, albo może wcześniejszą próbą zainstalowania klejnotu zamiast wtyczki, w którym to przypadku przeczytałem, że powinienem być w stanie zaradzić /config/environments.rb plik w jakiś sposób:

Nie sądziłem, że poprzednia instalacja klejnotu będzie miała znaczenie, ponieważ zrobiłem to w starą wersję strony, którą wyrzuciłem do kosza przed zainstalowaniem wtyczki. W aktualnej wersji strony pokazuję, że po migracji migracja tabeli została zaktualizowana za pomocą kolumn Spinacza. Tu jest mój kodu:

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

Błąd pochodzi z PostsController „show” metoda, ale masz „index” metoda i treść „nowej” widzenia wkleić tam? Uporządkuj swoje pytanie, dołączając odpowiednie informacje, a bardziej prawdopodobne jest, że ktoś może Ci w tym pomóc. – jdl

+1

Ponadto mogę prawie zagwarantować, że największą wskazówką jest fakt, że błąd odwołuje się do klasy, a nie do posta. Powinno być dość oczywiste, gdy zobaczymy faktyczny kod, który się nie udaje. – jdl

+0

właśnie zaktualizowano dla metody show. Przepraszam za to. Nowość w tym wszystkim. Dzięki za kierunek. – bgadoci

Odpowiedz

172

Jest bardzo ważne, aby ponownie uruchomić serwer po zainstalowaniu nowych klejnotów/wtyczek. To powinno rozwiązać twój problem.

+3

naprawiłam mój problem, +1 dzięki –

+0

naprawiono mnie również +1 – Stu

+0

naprawiono również mój problem, a także byłam z kundlem ... nie używałem go, więc myślę, że musisz ponownie uruchomić tego złego chłopaka, kiedy zmieniasz wtyczki i/lub configs. – pjammer

8

sugeruję zainstalowanie spinacza gem. Następnie wystarczy dodać config.gem 'paperclip' do swojego środowiska.rb i uruchomić sudo rake gems:install.

+0

To działało. Dziękuję Ci bardzo. – bgadoci

+0

Pracowałem także dla mnie; +1 –

+0

Witam .. Używam Rails 2.0.2 i ruby ​​1.8.7 n Nadal stoję w obliczu tego błędu ..Dodałem wymagany "spinacz" w pliku environment.rb i zainstalowałem spinacz 2.3.8, ponieważ mój activerecord i activesupport są w wersji 2.0.2. Wszelkie sugestie dotyczące tego, co mogę zrobić, aby to naprawić ...? Czy jest jakiś sposób, aby uzyskać wtyczkę do spinacza? ... jako alternatywa, ponieważ używam starszych wersji szyn, wtyczki wciąż działają. Słyszałem, że thinkbot zamknął ich svn rep, czy mogę jakoś to dostać przez github .. ?? – boddhisattva

0

Domyślam się, że powinno to być oczywiste, ale używam mongo/mongoid jako mojej warstwy danych i potrzebowałem zainstalować mongoid paperclip, aby działała.

1

stworzyć paperclip.rb wewnątrz pliku config/inicjalizatorów/paperclip.rb

Dodaj poniższe linie i zrestartować serwer

require "spinacza/railtie"

Spinacz :: Railtie. insert

1

Ten błąd wystąpił spontanicznie na dwóch różnych komputerach dev po Paperclip działał dobrze przez kilka tygodni.

spring stop

następnie wznowiona moja konsola szyny była potrzebna

Powiązane problemy