Я пытаюсь с помощью Angular загружать несколько файлов из формы. И проблема в том, что приложение rails только получает один файл в хеше params
.
У меня есть форма для создания article
и в этой article
есть несколько article_attachments
В угловом файле article.js
я загружаю форму следующим образом:
function(Upload, $http, $q) {
var article = {
create: function(newArticleForm) {
sendPayload(newArticleForm, 'POST', '/articles.json');
}
}
sendPayload = function(formData, method, url) {
var file_attachment, options, ref, ref1;
file = (ref = formData.file) != null ? ref : [];
var names = [];
for (var i = 0; i < formData.file.length; ++i)
names.push(formData.file[i].name);
options = {
url: url,
method: method,
file: formData.file,
file_form_data_name: names,
fields: {
article: {
brand: formData.brand,
price: formData.price,
user_id: formData.user_id
}
}
};
return Upload.upload(options);
};
return article;
}
И console.log действительно дает, что он отправляет несколько файлов, например, следующим образом:
Но проблема в стороне рельсов, в моем файле articles_controller.rb
, хеш params
содержит только один из файлов
def create
@article = current_user.articles.new(article_params)
begin
@article.save!
if params[:article][:file]
params[:article][:file].each { |image| @article.article_attachments.create(url: image)}
end
render json: @article.to_json
rescue ActiveRecord::RecordInvalid => e
render json: @article.errors ## You might want to specify a json format as well
return
end
end
private
def article_params
params.require(:article).permit(
:price, :brand, :model,:provider,
:internal_memory, :color,
:article_state, :battery_included, :user_id,
:file
)
end
def process_params
params[:article] = JSON.parse(params[:article])
.with_indifferent_access
end
параметры запроса, которые должны содержать 2 загружаемых файла:
{
"article" => {
"brand" => "LG",
"price" => 123,
"user_id" => 2
},
"file" => #<ActionDispatch::Http::UploadedFile:0x007fe458d5b760 @tempfile=#<Tempfile:/var/folders/ps/tt94sbxd3dz31rxvw3v1r8nw0000gn/T/RackMultipart20150913-2113-hwty51.jpg>, @original_filename="140911111141-photo-realism-sam-silva-ocelot-horizontal-large-gallery.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"file\"; filename=\"140911111141-photo-realism-sam-silva-ocelot-horizontal-large-gallery.jpg\"\r\nContent-Type: image/jpeg\r\n">,
"controller" => "articles",
"action" => "create",
"format" => "json"
}
Так что здесь пропало?
Попытайтесь изменить свой article_params
ниже
def article_params
params.require(:article).permit( :price, :brand, :model,:provider, :internal_memory, :color, :article_state, :battery_included, :user_id, :file => [])
end