如何将已发布的文件分配给控制器中的Paperclip模型



我正在尝试为网站的一部分提供一次性的图像上传功能(通过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"rnContent-Type: image/jpegrn", @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最多可包含四个属性(所有属性都以该属性为前缀附件的名称,因此如果你愿意),并给他们一个友好的前端。这些属性是:

_文件名_文件大小(_S)_content_type_更新

默认情况下,回形针只需要_file_name运转

但我得到这个错误

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

如何让回形针接受此上传的文件?

尝试:

@asset.asset = params[:file]

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

最新更新