paperclip在哪里放置missing.png默认图像?

Don*_*lio 5 ruby-on-rails image paperclip

我在我的应用程序中使用paperclip,但我的控制器测试因以下原因而失败:

BlogsControllerTest#test_should_update_blog:
Paperclip::AdapterRegistry::NoHandlerError: No handler found for "/images/original/missing.png"
    /Users/user/.rvm/gems/ruby-2.1.2/gems/paperclip-3.5.2/lib/paperclip/io_adapters/registry.rb:19:in `handler_for'
    /Users/user/.rvm/gems/ruby-2.1.2/gems/paperclip-3.5.2/lib/paperclip/io_adapters/registry.rb:29:in `for'
    /Users/user/.rvm/gems/ruby-2.1.2/gems/paperclip-3.5.2/lib/paperclip/attachment.rb:96:in `assign'
Run Code Online (Sandbox Code Playgroud)

我不确定将missing.png图像放在我的代码中的哪个位置,我试过public/assets/original/missing.png但它似乎没有管理它.

还有一些奇怪的事情:我有一个paperclip.rb初始化线:

Paperclip::Attachment.default_options[:default_url] = "/images/default_image.png"
Run Code Online (Sandbox Code Playgroud)

但仍然是应用程序正在寻找 missing.png

更新:好的我认为在模型中覆盖了default_url:

has_attached_file :image, styles: { big: "1200X630>", thumb: "150X150" }, default_url: "/images/:style/missing.png"
Run Code Online (Sandbox Code Playgroud)

我仍然不知道在哪里放置图像.

UPDATE2:

整个回形针初始化程序:

Paperclip::Attachment.default_options[:styles] = { thumb: "100x100#",  small: "200x200#",  screen: "800x600#"}
Paperclip::Attachment.default_options[:default_url] = "/images/missing.png"
Paperclip::Attachment.default_options[:path] = ":rails_root/public/assets/:class/:attachment/:id_partition/:style/:hash.:extension"
Paperclip::Attachment.default_options[:url] = "/assets/:class/:attachment/:id_partition/:style/:hash.:extension"
Paperclip::Attachment.default_options[:hash_secret] = "XXXXXXXXXXXXXXXXX"
Paperclip.registered_attachments_styles_path = "public/assets/paperclip_attachments2.yml"
Run Code Online (Sandbox Code Playgroud)

UPDATE3:检查实际上升代码回形针代码,异常是由上升这段代码,这基本上是测试所有可用的适配器,看起来像最接近我想要做的是一个fileAdapter在此进行测试,如果传递的字符串是一个文件.

发现这一点我感到很惊讶,我可能会在这里遇到问题.如果我将初始化程序行交换为:

Paperclip::Attachment.default_options[:default_url] = File.new "public/images/missing.png"
Run Code Online (Sandbox Code Playgroud)

然后异常是不同的:

BlogsControllerTest#test_should_update_blog:
NoMethodError: undefined method `gsub' for #<File:public/images/missing.png>
    /Users/user/.rvm/gems/ruby-2.1.2/gems/paperclip-3.5.2/lib/paperclip/interpolations.rb:33:in `block in interpolate'
    /Users/user/.rvm/gems/ruby-2.1.2/gems/paperclip-3.5.2/lib/paperclip/interpolations.rb:32:in `each'
Run Code Online (Sandbox Code Playgroud)

UPDATE4:这是测试的样子:

  test "should update blog" do
    put :update, id: @blog, blog: { 
      author_id: @blog.author_id, 
      body: @blog.body, 
      image: @blog.image, 
      title: @blog.title
    }
    assert_redirected_to blog_path(assigns(:blog))
  end

 test "should create blog" do
    assert_difference('Blog.count') do
      post :create, blog: { 
        author_id: @blog.author_id, 
        body: @blog.body, 
        image: @blog.image, 
        title: @blog.title }
    end

    assert_redirected_to blog_path(assigns(:blog))
  end
Run Code Online (Sandbox Code Playgroud)

然后:

@blog.image.class
=> Paperclip::Attachment
@blog.image.url
=> "/images/missing.png"
Run Code Online (Sandbox Code Playgroud)

Fil*_*uzi 11

对于这行代码:

Paperclip::Attachment.default_options[:default_url] = "/images/default_image.png"
Run Code Online (Sandbox Code Playgroud)

Paperclip正在寻找下的图像 /public/images/default_image.png

更新:

所以你已经定义了风格bigthumb.Paperclip将寻找img in public/images/thumb/default_image.pngpublic/images/big/default_image.png取决于你将要调用的样式<% image_tag @model.image.url(:style) %>.

更新#2(根据作者提问的更新#4)

疑难杂症!如果你想要模型使用:default_url不发送:image参数.从params删除图像,让我们看看它是怎么回事


Alb*_*alà 7

在Rails 5中,我设法使用:路径中的样式:

Paperclip::Attachment.default_options[:default_url] = "/images/folder/:style/missing.png"
Run Code Online (Sandbox Code Playgroud)

如果,例如,此图像不存在:

<%= image_tag @photo.picture.url(:medium) %>
Run Code Online (Sandbox Code Playgroud)

结果是

/images/folder/medium/missing.png
Run Code Online (Sandbox Code Playgroud)