【发布时间】:2010-04-18 03:53:44
【问题描述】:
我刚刚安装了 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 %>
【问题讨论】:
-
错误来自 PostsController "show" 方法,但是您已经将 "index" 方法和 "new" 视图的内容粘贴到那里?清理您的问题以包含相关信息,并且更有可能有人可以帮助您解决这个问题。
-
另外,我几乎可以保证最大的线索是错误是引用 Class 而不是 Post。一旦我们看到实际失败的代码,这应该是相当明显的。
-
刚刚更新了 show 方法。对于那个很抱歉。这一切都是新的。感谢您的指导。
标签: ruby-on-rails ruby paperclip