【问题标题】:how to assign a posted file to a Paperclip model in the controller如何将发布的文件分配给控制器中的回形针模型
【发布时间】:2014-01-25 08:04:51
【问题描述】:

我正在尝试为网站的一部分(通过 ajax)提供一次性图片上传功能。现在,发布的值如下所示:

Processing by ApiPostsController#upload_image as */*
  Parameters: {"file"=>#<ActionDispatch::Http::UploadedFile:0x007feb23c28420 @original_filename="yoko.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"file\"; filename=\"yoko.jpg\"\r\nContent-Type: image/jpeg\r\n", @tempfile=#<File:/var/folders/58/8l1dcc5n6dd_7mhqvqr_3zm40000gn/T/RackMultipart20140107-70298-1mih9mx>>}
this is auth_token  WgfFAEz3JIApcWDjz2dRgA

我想在控制器中做这样的事情:

  def upload_image
    @asset=Asset.new
    @asset.asset_file_name=params[:filename]
    @asset.save!

    r={}
    r[:status]="success"
    render text: r.to_json
  end

我们的资产模型使用资产作为名称(很遗憾)。

mysql> describe assets;
+----------------------+--------------+------+-----+---------+----------------+
| Field                | Type         | Null | Key | Default | Extra          |
+----------------------+--------------+------+-----+---------+----------------+
| id                   | int(11)      | NO   | PRI | NULL    | auto_increment |
| name                 | varchar(255) | YES  |     | NULL    |                |
| created_at           | datetime     | NO   |     | NULL    |                |
| updated_at           | datetime     | NO   |     | NULL    |                |
| asset_file_name      | varchar(255) | YES  |     | NULL    |                |
| asset_content_type   | varchar(255) | YES  |     | NULL    |                |
| asset_file_size      | int(11)      | YES  |     | NULL    |                |
| asset_updated_at     | datetime     | YES  |     | NULL 

我正在尝试按照回形针的自述文件中的说明进行操作:

Paperclip 最多可以包含四个属性(所有属性都以 附件的名称,因此每个模型可以有多个附件,如果 你希望)并给他们一个友好的前端。这些属性是:

_file_name _文件大小 _内容类型 _updated_at

默认情况下,回形针只需要 _file_name 操作。

但我得到了这个错误

ActiveRecord::RecordInvalid(验证失败:资产不能为空): app/controllers/api_posts_controller.rb:21:in `upload_image'

我怎样才能让回形针接受这个上传的文件?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3.2 paperclip


    【解决方案1】:

    试试:

    @asset.asset = params[:file]
    

    文档中的内容意味着您可以将这四列添加到模型中,并且它们都会在保存附件时自动填充。 asset_file_name 是唯一需要的列,它将包含在服务器上创建的新文件的名称。 如果您单独分配 file_name,您只会在数据库中填写一列,但文件本身不会保存在服务器的磁盘上 - 您需要分配整个文件,而回形针将负责其余的工作。

    【讨论】:

    • 这看起来可行;太感谢了!!必须等待几分钟。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    相关资源
    最近更新 更多