首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查“poster_file_name”缺少必需的poster_file_name模型

检查“poster_file_name”缺少必需的poster_file_name模型
EN

Stack Overflow用户
提问于 2014-05-22 03:10:41
回答 1查看 187关注 0票数 0

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

  • 用户只有一个id、名称和电子邮件,并且有许多评论和评论。
  • 评论有一个id,标题,内容,用户id,有多个注释,属于一个用户。
  • 注释有一个id,内容,审查id,用户id,属于一个用户和一个评论。

没有认证系统。

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

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

所以,遵循这个教程

我安装了最新版本的ImageMagik和剪纸夹,

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

代码语言:javascript
复制
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

我运行了以下迁移:

代码语言:javascript
复制
rails generate paperclip review poster

显示在我的终端上:

代码语言:javascript
复制
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>'

然后跑了:

代码语言:javascript
复制
rake db:migrate

我停止并重新启动了我的服务器。

我用以下行编辑了我的Review#Edit视图文件:

代码语言:javascript
复制
<%= form.file_field :poster %>

我更新我的审核控制器:

代码语言:javascript
复制
def review_params
      params.require(:review).permit(:title, :poster, :content, :user_id)
    end

我补充说

代码语言:javascript
复制
<%= image_tag @review.poster.url(:medium) %>

Review#Index和Review#Show的

当我访问Review#Index页面时,应用程序就可以工作了。

当我访问Review#Edit页面时,应用程序也能工作:它显示一个字段来上传图像。

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

我怎么才能把这事做好?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-22 08:08:14

如前所述,生成剪纸夹迁移的protected_method错误是已知的问题,目标是包含在4.1.2版本中。

如果您不愿意修改您的Gemfile,从而避免可能导致副作用的任何其他边缘更改,则只需手动创建您自己的迁移:

代码语言:javascript
复制
class AddPosterColumnsToReviews < ActiveRecord::Migration
  def self.up
    add_attachment :reviews, :poster
  end

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23797215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档