Error: Unpermitted parameter: :audio_files
I have a form that lets users select multiple audio files to upload to the DB for some additional server-side processing.
Each selected audio file has associated attributes and for every audio file selected, I need to create a new entry into my AudioLoad model.
Responding to button 'onclick' event listener, I loop through each file in the in files array and
1) build/append a formData() object with required information
2) post this information using Rails.ajax
I can post all the data successfully if I DONT include the file object.
When I do include the file object in the post, I get the error unpermitted parameter: audio_file
I've included the console output below in addition to the code.
Each selected audio file has associated attributes and for every audio file selected, I need to create a new entry into my AudioLoad model.
Responding to button 'onclick' event listener, I loop through each file in the in files array and
1) build/append a formData() object with required information
2) post this information using Rails.ajax
I can post all the data successfully if I DONT include the file object.
When I do include the file object in the post, I get the error unpermitted parameter: audio_file
I've included the console output below in addition to the code.
Model class AudioLoad < ApplicationRecord belongs_to :user belongs_to :account has_many_attached :audio_files end
Controller
...
def audio_load_params
params.require(:audio_load).permit(:user_id, :account_id, :file_name, :file_hash, :load_date, :load_status, :tag_type, audio_files: [])
end
...View
<div class="container mx-auto my-8 px-4">
<div class="max-w-3xl mx-auto">
<div class="flex justify-between items-center mb-4">
<h1 class="h3">New Audio Load</h1>
<%= link_to 'Cancel', audio_loads_path, class: "btn btn-link" %>
</div>
<div class="bg-white rounded shadow p-8">
<%= render 'form', audio_load: @audio_load %>
</div>
<div id="filelist">
</div>
</div>
</div>Form <%= form_with(model: @audio_load) do |form| %> <%= collection_select :audio_load, :account_id, Account.where(owner_id: current_user.id).order(:name), :id, :name, include_blank: false, class: "form-control" %> <%= form.file_field :audio_files, multiple: true, id: "upload", accept: "audio/*" %> <%= form.hidden_field :user_id, value: current_user.id %> <button id="tag-file" class="btn-primary">Tag File</button> <% end %>
Relevant JS
......
for (var i = 0; i < files.length; ++i) {
data = new FormData()
data.append("audio_load[user_id]", userId)
data.append("audio_load[account_id]", accountId)
data.append("audio_load[file_name]", files[i].name)
data.append("audio_load[load_status]", 'ready')
data.append("audio_load[audio_files]", [files[i]])
Rails.ajax({
url: "/audio_loads",
type: "POST",
data: data,
dataType: 'script',
success: function(response) {
displayTagStatus(response)
}
})
}
}
......Console Output
Started POST "/audio_loads" for ::1 at 2020-10-26 13:16:28 -0400
Processing by AudioLoadsController#create as JS
Parameters: {"audio_load"=>{"user_id"=>"1", "account_id"=>"40", "file_name"=>"[FILTERED]", "load_status"=>"ready", "audio_files"=>#<ActionDispatch::Http::UploadedFile:0x00007fcf1a6c0700 @tempfile=#<Tempfile:/var/folders/r4/c0h7ky9j6xv4dks8j8csvgwr0000gn/T/RackMultipart20201026-36315-drtnxt.wav>, @original_filename="bc_guitarfuzz_hh.wav", @content_type="audio/wav", @headers="Content-Disposition: form-data; name=\"audio_load[audio_files]\"; filename=\"bc_guitarfuzz_hh.wav\"\r\nContent-Type: audio/wav\r\n">}}
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["id", 1], ["LIMIT", 1]]
↳ app/controllers/concerns/set_current_request_details.rb:11:in `block (2 levels) in <module:SetCurrentRequestDetails>'
Account Load (0.6ms) SELECT "accounts".* FROM "accounts" INNER JOIN "account_users" ON "accounts"."id" = "account_users"."account_id" WHERE "account_users"."user_id" = $1 AND "accounts"."id" = $2 LIMIT $3 [["user_id", 1], ["id", 40], ["LIMIT", 1]]
↳ app/controllers/concerns/set_current_request_details.rb:24:in `block (2 levels) in <module:SetCurrentRequestDetails>'
Unpermitted parameter: :audio_files
(0.2ms) BEGIN
↳ app/controllers/audio_loads_controller.rb:26:in `create'
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
↳ app/controllers/audio_loads_controller.rb:26:in `create'
Account Load (0.3ms) SELECT "accounts".* FROM "accounts" WHERE "accounts"."id" = $1 LIMIT $2 [["id", 40], ["LIMIT", 1]]
↳ app/controllers/audio_loads_controller.rb:26:in `create'
AudioLoad Create (1.1ms) INSERT INTO "audio_loads" ("user_id", "account_id", "file_name", "load_status", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5, $6) RETURNING "id" [["user_id", 1], ["account_id", 40], ["file_name", "bc_guitarfuzz_hh.wav"], ["load_status", "ready"], ["created_at", "2020-10-26 17:16:28.070039"], ["updated_at", "2020-10-26 17:16:28.070039"]]
↳ app/controllers/audio_loads_controller.rb:26:in `create'
AudioLoad Load (0.3ms) SELECT "audio_loads".* FROM "audio_loads" WHERE "audio_loads"."load_status" = $1 [["load_status", "ready"]]
↳ app/models/audio_load.rb:15:in `tag_audio'
AudioLoad Update All (0.9ms) UPDATE "audio_loads" SET "load_status" = $1, "tag_type" = $2 WHERE "audio_loads"."id" IN (SELECT "audio_loads"."id" FROM "audio_loads" WHERE "audio_loads"."id" = $3 LIMIT $4) [["load_status", "completed"], ["tag_type", "duplicate"], ["id", 64], ["LIMIT", 1]]
↳ app/models/audio_load.rb:21:in `block in tag_audio'
(3.2ms) COMMIT
↳ app/controllers/audio_loads_controller.rb:26:in `create'
Completed 200 OK in 41ms (Views: 0.5ms | ActiveRecord: 9.4ms | Allocations: 15337)
Notifications
You’re not receiving notifications from this thread.