以下是我传递给Rails控制器的参数
Parameters: {"file"=>#<ActionDispatch::Http::UploadedFile:0x007f6244989100 @tempfile=#<Tempfile:/tmp/RackMultipart20151109-3635-1y6e4wr.mp3>,
@original_filename="07 - Barfi - Ala Barfi! (Version 2) [DM].mp3",
@content_type="audio/mp3", @headers="Content-Disposition: form-data; name=\"file\"; filename=\"07 - Barfi - Ala Barfi! (Version 2) [DM].mp3\"\r\nContent-Type: audio/mp3\r\n">,
"event_id"=>"19"}
然后我将其存储在我的数据库中
def create
event = Event.find(params[:event_id])
playlist = event.playlists.create(file: playlist_params[:file], name: playlist_params[:@original_filename])
render json: event
end
private
def playlist_params
params.permit(:file, :@original_filename)
end
以下是我的播放列表模型架构
create_table "playlists", force: :cascade do |t|
t.string "file", limit: 255
t.integer "event_id", limit: 4
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "name", limit: 255
end
但我的姓名栏显示为空。
下面是上面的服务器端代码
Started POST "/events/19/playlists" for 127.0.0.1 at 2015-11-09 18:06:17 +0530
Processing by Api::V1::PlaylistsController#create as JSON
Parameters: {"file"=>#<ActionDispatch::Http::UploadedFile:0x007f6244989100 @tempfile=#<Tempfile:/tmp/RackMultipart20151109-3635-1y6e4wr.mp3>, @original_filename="07 - Barfi - Ala Barfi! (Version 2) [DM].mp3", @content_type="audio/mp3", @headers="Content-Disposition: form-data; name=\"file\"; filename=\"07 - Barfi - Ala Barfi! (Version 2) [DM].mp3\"\r\nContent-Type: audio/mp3\r\n">, "event_id"=>"19"}
Can't verify CSRF token authenticity
Event Load (0.2ms) SELECT `events`.* FROM `events` WHERE `events`.`id` = 19 LIMIT 1
Unpermitted parameters: format, event_id
Unpermitted parameters: format, event_id
(0.2ms) BEGIN
SQL (0.4ms) INSERT INTO `playlists` (`file`, `event_id`, `created_at`, `updated_at`) VALUES ('07_-_Barfi_-_Ala_Barfi___Version_2___DM_.mp3', 19, '2015-11-09 12:36:17', '2015-11-09 12:36:17')
(55.3ms) COMMIT
Completed 200 OK in 161ms (Views: 1.4ms | ActiveRecord: 60.3ms)
我不知道为什么在上面服务器端代码的播放列表表的名称列中未插入sql。
在参数中传递的file属性实际上具有所需的大多数数据。@original_filename是要上传的文件的实例变量。
您可以尝试使用控制器的strong_parameters部分,然后尝试将其修改为如下所示:
def playlist_params
params.permit(file: [])
end
然后,当您保存文件时,可以将代码更改为如下所示:
def create
event = Event.find(params[:event_id])
file = playlist_params[:file]
playlist = event.playlists.create(file: file, name: file.original_filename)
render json: event
end
您可能会说,您实际上并不需要playlist_params,您可以像这样访问params [:file]:
def create
event = Event.find(params[:event_id])
file = params[:file]
playlist = event.playlists.create(file: file, name: file.original_filename)
render json: event
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句