2015-05-04 57 views
1

我已經在Rails 4.2.1應用中設置了paperclip(v 4.2.1)+ aws-sdk-v1 gem。該模型是建立正是如此:回形針+導軌4.2 - image_file_name爲空

型號:

class Photo < ActiveRecord::Base 

    attr_accessor :image_file_name 
    has_attached_file :image, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "/images/:style/missing.png" 
    validates_attachment_content_type :image, :content_type => ["image/jpg", "image/jpeg", "image/png", "image/gif"] 

end 

表:

= form_for @photo_set_new_photo, :html => { :multipart => true } do |f| 
    = f.file_field(:image, {class: 'photo-upload', accept:"image/*;capture=camera"}) 

控制器:

def create 
    @photo = Photo.new(photo_params) 

    respond_to do |format| 
    if @photo.save 
     format.html { redirect_to @photo, notice: 'Photo was successfully created.' } 
     format.json { render :show, status: :created, location: @photo } 
    else 
     format.html { render :new } 
     format.json { render json: @photo.errors, status: :unprocessable_entity } 
    end 
    end 
end 

def photo_params 
    params.require(:photo).permit(:category_id, :photo_set_id, :image) 
end 

所以幾乎標準的餅乾刀你所期望的。當表單提交,我有這樣的記錄:

Started POST "/photos" for 127.0.0.1 at 2015-05-04 11:47:04 +0200 
Processing by PhotosController#create as JSON 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"...", "photo"=>{"category_id"=>"", "image"=>#<ActionDispatch::Http::UploadedFile:0x007ffe5c421ed8 @tempfile=#<Tempfile:/tmp/RackMultipart20150504-20205-c0g1d6.png>, @original_filename="antaeater-birthday.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"photo[image]\"; filename=\"antaeater-birthday.png\"\r\nContent-Type: image/png\r\n">}} 
Command :: file -b --mime '/tmp/3bdad8b82d38ab9d77cab8cd85c2877120150504-20205-1li6xz7.png' 
Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/3bdad8b82d38ab9d77cab8cd85c2877120150504-20205-2uc2d6.png[0]' 2>/dev/null 
Command :: identify -format %m '/tmp/3bdad8b82d38ab9d77cab8cd85c2877120150504-20205-2uc2d6.png[0]' 
Command :: convert '/tmp/3bdad8b82d38ab9d77cab8cd85c2877120150504-20205-2uc2d6.png[0]' -auto-orient -resize "300x300>" '/tmp/6025e18d9f999e893c1840772ad7c87b20150504-20205-v780mg' 
Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/3bdad8b82d38ab9d77cab8cd85c2877120150504-20205-2uc2d6.png[0]' 2>/dev/null 
Command :: identify -format %m '/tmp/3bdad8b82d38ab9d77cab8cd85c2877120150504-20205-2uc2d6.png[0]' 
Command :: convert '/tmp/3bdad8b82d38ab9d77cab8cd85c2877120150504-20205-2uc2d6.png[0]' -auto-orient -resize "100x100>" '/tmp/6025e18d9f999e893c1840772ad7c87b20150504-20205-1qlvsdh' 
    (0.2ms) BEGIN 
Command :: file -b --mime '/tmp/3bdad8b82d38ab9d77cab8cd85c2877120150504-20205-3p5x8o.png' 
    SQL (0.3ms) INSERT INTO "photos" ("image_content_type", "image_file_size", "image_updated_at", "image_file_name", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5, $6) RETURNING "id" [["image_content_type", "image/png"], ["image_file_size", 1241569], ["image_updated_at", "2015-05-04 09:47:04.866533"], ["image_file_name", nil], ["created_at", "2015-05-04 09:47:05.173238"], ["updated_at", "2015-05-04 09:47:05.173238"]] 
[paperclip] saving /photos/images/000/000/008/original/antaeater-birthday.png 
[AWS S3 200 2.681968 0 retries] put_object(:acl=>:public_read,:bucket_name=>"bucket-development",:content_length=>1241569,:content_type=>"image/png",:data=>Paperclip::UploadedFileAdapter: antaeater-birthday.png,:key=>"photos/images/000/000/008/original/antaeater-birthday.png") 

[paperclip] saving /photos/images/000/000/008/medium/antaeater-birthday.png 
[AWS S3 200 0.17464 0 retries] put_object(:acl=>:public_read,:bucket_name=>"bucket-development",:content_length=>145007,:content_type=>"image/png",:data=>Paperclip::FileAdapter: 6025e18d9f999e893c1840772ad7c87b20150504-20205-v780mg,:key=>"photos/images/000/000/008/medium/antaeater-birthday.png") 

[paperclip] saving /photos/images/000/000/008/thumb/antaeater-birthday.png 
[AWS S3 200 0.074367 0 retries] put_object(:acl=>:public_read,:bucket_name=>"bucket-development",:content_length=>18256,:content_type=>"image/png",:data=>Paperclip::FileAdapter: 6025e18d9f999e893c1840772ad7c87b20150504-20205-1qlvsdh,:key=>"photos/images/000/000/008/thumb/antaeater-birthday.png") 

該文件被保存到S3桶(我可以看到它在管理控制檯上),但在數據庫中的照片記錄看起來是這樣的:

id | image_file_name | image_content_type | image_file_size | image_updated_at 
8 |  NULL  | image/png  | 1241569  | 2015-05-04 09:47:04.866533 

正如你所看到的 - image_file_name爲空,這已經是什麼日誌告訴我們。問題是 - 爲什麼?

回答

1

我想你明確地將image_file_name分配到一個虛擬屬性。

也許attr_accessor :image_file_name不需要,因爲我記得paperclip會爲您存儲image_file_name

+0

(facepalm)正確的你是善良的先生!爲了解釋我自己:我敢肯定,在開發過程中,回形針一直罵我沒有那個屬性存取器,所以我把它放進去。 – GregPK