web-dev-qa-db-ja.com

PaperClipのインストール時に「has_attached_file」の未定義メソッドを取得するのはなぜですか?

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

新しいgem/pluginsをインストールした後、サーバーを再起動することが非常に重要です。これで問題が解決するはずです

178
Raunak

Paperclip gemをインストールすることをお勧めします。次に、config.gem 'Paperclip'をenvironment.rbに追加して、Sudo rake gems:installを実行するだけです。

8
Eimantas

Paperclipが数週間正常に動作していた後、2台の異なる開発マシンでこのエラーが自発的に発生しました。

spring stop

その後、再起動しましたRailsコンソールが必要でした

1
chris finne

config/initializers/Paperclip.rb内にPaperclip.rbファイルを作成します

以下の行を追加して、サーバーを再起動します

「Paperclip/railtie」が必要です

Paperclip :: Railtie.insert

1
kotesh

これは明白なはずだったと思いますが、mongo/mongoidをデータレイヤーとして使用しており、 mongoid Paperclip をインストールする必要があります。

0
TheRightChoyce