如何在rails控制器中使用参数

以下是传递给rails控制器的参数

Parameters: {"file"=>#<ActionDispatch::Http::UploadedFile:0x007f6244989100 @tempfile=#, @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=#, @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没有插入上面服务器端代码的播放列表中的名称列。

在params中传递的文件属性实际上具有您需要的大部分数据。 @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