我正在构建一个非常简单的应用程序,允许用户使用以下模型发布评论和评论:
没有身份验证系统。
到目前为止,应用程序正在运行。
现在,我正在尝试添加一项功能,让用户在添加评论时上传图片(电影海报)。
所以,遵循这个tutorial:
我安装了最新版本的ImageMagik和Paperclip,
我在评论模型中添加了以下内容:
class Review < ActiveRecord::Base
has_attached_file :poster, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "/images/:style/missing.png"
validates_attachment_content_type :poster, :content_type => /\Aimage\/.*\Z/
end
我运行了以下迁移:
rails generate paperclip review poster
在我的终端显示了这个:
MacBook-Pro-de-Thibaud-CLEMENT:moview Thibaud$ rails generate paperclip review poster
/Users/Thibaud/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.0.5/lib/rails/generators/actions/create_migration.rb:13:in `migration_file_name': protected method `migration_file_name' called for #<PaperclipGenerator:0x007fac51501428> (NoMethodError)
from /Users/Thibaud/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.0.5/lib/rails/generators/actions/create_migration.rb:34:in `existing_migration'
from /Users/Thibaud/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/thor-0.19.1/lib/thor/actions/empty_directory.rb:112:in `invoke_with_conflict_check'
from /Users/Thibaud/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/thor-0.19.1/lib/thor/actions/create_file.rb:60:in `invoke!'
from /Users/Thibaud/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/thor-0.19.1/lib/thor/actions.rb:94:in `action'
from /Users/Thibaud/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.0.5/lib/rails/generators/migration.rb:36:in `create_migration'
from /Users/Thibaud/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.0.5/lib/rails/generators/migration.rb:65:in `migration_template'
from /Users/Thibaud/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/paperclip-4.1.1/lib/generators/paperclip/paperclip_generator.rb:16:in `generate_migration'
from /Users/Thibaud/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/thor-0.19.1/lib/thor/command.rb:27:in `run'
from /Users/Thibaud/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/thor-0.19.1/lib/thor/invocation.rb:126:in `invoke_command'
from /Users/Thibaud/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/thor-0.19.1/lib/thor/invocation.rb:133:in `block in invoke_all'
from /Users/Thibaud/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/thor-0.19.1/lib/thor/invocation.rb:133:in `each'
from /Users/Thibaud/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/thor-0.19.1/lib/thor/invocation.rb:133:in `map'
from /Users/Thibaud/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/thor-0.19.1/lib/thor/invocation.rb:133:in `invoke_all'
from /Users/Thibaud/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/thor-0.19.1/lib/thor/group.rb:232:in `dispatch'
from /Users/Thibaud/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/thor-0.19.1/lib/thor/base.rb:440:in `start'
from /Users/Thibaud/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.0.5/lib/rails/generators.rb:156:in `invoke'
from /Users/Thibaud/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.0.5/lib/rails/commands/generate.rb:11:in `<top (required)>'
from /Users/Thibaud/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/activesupport-4.0.5/lib/active_support/dependencies.rb:229:in `require'
from /Users/Thibaud/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/activesupport-4.0.5/lib/active_support/dependencies.rb:229:in `block in require'
from /Users/Thibaud/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/activesupport-4.0.5/lib/active_support/dependencies.rb:214:in `load_dependency'
from /Users/Thibaud/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/activesupport-4.0.5/lib/active_support/dependencies.rb:229:in `require'
from /Users/Thibaud/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.0.5/lib/rails/commands.rb:48:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'
然后跑了:
rake db:migrate
我确实停止并重启了我的服务器。
我使用以下行编辑了我的评论#编辑视图文件:
<%= form.file_field :poster %>
我更新了我的评论控制器:
def review_params
params.require(:review).permit(:title, :poster, :content, :user_id)
end
我添加了
<%= image_tag @review.poster.url(:medium) %>
同时回顾#Reford和Review#Show
当我访问Review#Index页面时,该应用程序正常运行。
当我访问Review#Edit页面时,该应用程序也可以运行:它会显示一个上传图像的字段。
然而,只要我点击&#34;更新评论&#34;按钮,然后,我收到以下错误消息:
我该如何做到这一点?
答案 0 :(得分:1)
回形针迁移生成器失败,这是回形针版本4.1上的一个已知问题:https://github.com/thoughtbot/paperclip/issues/1495
尝试使用以下命令更新gemfile:
gem 'paperclip', github: 'thoughtbot/paperclip'
在那之后:
bundle install
rails generate paperclip review poster
rake db:migrate`
没关系。
答案 1 :(得分:1)
如前所述,生成Paperclip迁移的protected_method
错误是一个已知问题,目标是包含在4.1.2版本中。
如果您不想修改Gemfile
,以避免任何可能导致副作用的其他边缘更改,您只需手动创建自己的迁移:
class AddPosterColumnsToReviews < ActiveRecord::Migration
def self.up
add_attachment :reviews, :poster
end
def self.down
remove_attachment :reviews, :poster
end
end
这正是发电机的作用。创建后,只需正常运行rake db:migrate
。