如果图像上传失败,我会收到nil错误(Rails Paperclip)

时间:2015-03-13 23:54:07

标签: ruby-on-rails ruby-on-rails-3 paperclip paperclip-validation

我收到此错误:

undefined method `each' for nil:NilClass

下面:

<% @images.each do |image| %>

这是我填充@images

的地方
class Users::RegistrationsController < Devise::RegistrationsController

  def edit
    @images= Dir.glob("public/assets/images/users/#{current_user.id}/med/*")
    super
  end
  ...

我的上传表单:

  <%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: {:multipart => true }) do |f| %>
    <div class="form-group">
      <label for = 'file-upload', class='btn btn-large btn-block btn-info'>
        <span class="glyphicon glyphicon-upload" aria-hidden="true"></span> Upload Picture
        <%= f.file_field :image, id: "file-upload", onchange: "this.form.submit()" %>
      </label>
    </div>
  <% end %>

我在回形针验证失败时才会出现此错误(如图像&gt; 1mb)

    has_attached_file :image, {styles: { small: "24x24#", med: "100x100#", large: "200x200#" },
                  :url  => "/assets/images/users/:id/:style/:basename.:extension",
                  :path => ":rails_root/public/assets/images/users/:id/:style/:basename.:extension",
                  :default_url => "/assets/images/users/default/:style/default.png",
                  :keep_old_files => true}

    validates_attachment_content_type :image, :content_type => /\Aimage\/.*\Z/
    validates_attachment_size :image, :less_than => 1.megabytes

问题是我不知道应该如何处理文件上传失败。

1 个答案:

答案 0 :(得分:0)

我使用文件类并检查文件是否存在,并检查'​​file'是否真的是文件而不是目录。我还检查并确保数据库字段不为空并标记记录(以后删除),如果是。

File.exist?('image.jpg')  && File.file?('image.jpg')

我作为Sidekiq工作人员(后台工作)的一部分这样做,我正在检查多个上传,更新相关对象作为工作的一部分。