我使用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
我使用curl发布数据
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
答案 0 :(得分:1)
可能你丢失了@
:
-F "imagepost[imagepath_data][]=@c4ewt.JPG"
编辑:最好从Rails控制台bin/rails c
开始并检查您的数据库: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]=@/Users/myuser/my0.jpg" \
-F "report[report_images_attributes][1][kind]=hoho" \
-F "report[report_images_attributes][1][image]=@/Users/myuser/my1.png"