Ruby on rails 查看模型缺少';海报文件名称';

Ruby on rails 查看模型缺少';海报文件名称';,ruby-on-rails,file-upload,paperclip,Ruby On Rails,File Upload,Paperclip,我正在构建一个非常简单的应用程序,允许用户发布评论并对其进行评论,其模式如下: 用户只有一个id、姓名和电子邮件,并且有许多评论和评论 评论有一个id、标题、内容、用户id,有许多评论,属于一个用户 评论有一个id,内容,评论id,用户id,属于一个用户和一个评论 没有身份验证系统 到目前为止,该应用程序正在运行 现在,我正在尝试添加一个功能,允许用户在添加评论时上传图像(电影海报) 那么接下来呢, 我安装了最新版本的ImageMagik和回形针 我在我的审查模型中添加了以下内容: clas

我正在构建一个非常简单的应用程序,允许用户发布评论并对其进行评论,其模式如下:

  • 用户只有一个id、姓名和电子邮件,并且有许多评论和评论
  • 评论有一个id、标题、内容、用户id,有许多评论,属于一个用户
  • 评论有一个id,内容,评论id,用户id,属于一个用户和一个评论
没有身份验证系统

到目前为止,该应用程序正在运行

现在,我正在尝试添加一个功能,允许用户在添加评论时上传图像(电影海报)

那么接下来呢,

我安装了最新版本的ImageMagik和回形针

我在我的审查模型中添加了以下内容:

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
在我的终端中显示了以下内容:

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>'
我确实停止并重新启动了我的服务器

我用以下行编辑了我的评论#编辑视图文件:

<%= form.file_field :poster %>
我补充说

<%= image_tag @review.poster.url(:medium) %>

既要查看索引,又要查看显示

当我访问Review#Index页面时,该应用程序运行正常

当我访问Review#Edit页面时,该应用程序也可以工作:它显示一个用于上传图像的字段

但是,只要单击“更新审阅”按钮,就会收到以下错误消息:


我如何才能做到这一点?

回形针迁移生成器失败,这是回形针版本4.1中的一个已知问题:

尝试使用以下内容更新您的文件:

gem 'paperclip', github: 'thoughtbot/paperclip'
在那之后:

bundle install
rails generate paperclip review poster
rake db:migrate`

那没问题。

如前所述,
受保护的\u方法
错误生成回形针迁移是一个已知的问题,目标是包含在版本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
class AddPosterColumnsToReviews

这正是发电机将要做的。创建之后,只需正常运行
rake db:migrate

谢谢Yann。我更新了我的档案。然而,正如格雷姆所建议的那样,似乎需要手动迁移。
gem 'paperclip', github: 'thoughtbot/paperclip'
bundle install
rails generate paperclip review poster
rake db:migrate`
class AddPosterColumnsToReviews < ActiveRecord::Migration
  def self.up
    add_attachment :reviews, :poster
  end

  def self.down
    remove_attachment :reviews, :poster
  end
end