2017-06-02 1 views
0

iam carierwaveを使用してマルチパート/フォームデータを投稿しています。 これは私のスクリプトですアップロードされたファイルパスにcarierwaveがヌルになる

#imagepath model 
    class Imagepath < ActiveRecord::Base 
     belongs_to :imagepost 
     attr_accessor :path 
     mount_uploader :path, ImagepathUploader 
    end 

#imagepost model 
class Imagepost < ActiveRecord::Base 
    belongs_to :user 
    has_many :imagepaths 
    has_many :imagecomments 
    has_many :imagelikes 
    attr_accessor :imagepath_data 
    # attr_accessor :path 
end 

    #imagepost controller post method 
    # POST /imageposts 
    def create 
    @imagepost = Imagepost.new(imagepost_params) 

    if @imagepost.save 
     params[:imagepost][:imagepath_data].each do |file| 
     @imagepost.imagepaths.create!(:path => file) 
     end 

     render json: @imagepost, status: :created, location: @imagepost 
    else 
     render json: @imagepost.errors, status: :unprocessable_entity 
    end 
    end 


#imagepost_params for post_params 
def imagepost_params 
    params.require(:imagepost).permit(:title, :description, :user_id, :imagepath_data => []) 
end 

データを投稿するカール使用してIAM

curl 
-F "imagepost[imagepath_data][]=c4ewt.JPG" 
-F "imagepost[imagepath_data][]=border-image.png" 
-F "imagepost[title]=asasassasa" 
-F "imagepost[description]=uhuhuhuhuhuhuh" 
-F "imagepost[user_id]=5" localhost:3000/imageposts 

投稿が仕事ですが、投稿しないの後、私は私のImagePathテーブルからパス行を取得するnullである:( enter image description here

答えて

1

おそらく、あなたは@を失いました:

-F "imagepost[imagepath_data][][email protected]" 

編集:Railsコンソールbin/rails cから始まり、DB:Imagepath.find(17)を調べる方が良いでしょう。実際に救われたことをあなたに示します。

冗長出力にはActive Record Nested Attributesとcurl -vオプションを使用することを提案します。ここ は、実際のプロジェクトからの簡単な例です:

report.rb

class Report < ApplicationRecord 
    # ... 
    accepts_nested_attributes_for :report_images, 
    reject_if: proc { |attributes| attributes[ 'image' ].blank? } 
end 

report_image.rb

class ReportImage < ApplicationRecord 
    # ... 
    mount_uploader :image, ReportImageUploader 
end 

reports_controller.rb

class ReportsController < YourBaseController 
    # ... 
    def create 
    # In real project service class is used 
    report = Report.create!(create_params) 
    # ... 
    end 

    private 

    def create_params 
    params 
     .require(:report) 
     .permit( 
     :my_report_attribute, 
     report_images_attributes: [ :kind, :image ]) 

    end 
end 
その後、

とカール:その、今は解決

curl -XPOST -v http://lvh.me:3000/yourendpoint/reports \ 
    -F "report[my_report_attribute]=Hehe" \ 
    -F "report[report_images_attributes][0][kind]=haha" \ 
    -F "report[report_images_attributes][0][image][email protected]/Users/myuser/my0.jpg" \ 
    -F "report[report_images_attributes][1][kind]=hoho" \ 
    -F "report[report_images_attributes][1][image][email protected]/Users/myuser/my1.png" 
+0

感謝。私もシリアル化:アバター、私のimagepathsモデルのJSONを追加し、今働いた。私はsqliteを訴える – cahyowhy

関連する問題