【发布时间】:2015-09-13 14:55:44
【问题描述】:
我正在尝试使用 Angular 从一个表单上传多个文件。问题是,rails 应用程序只接收params 哈希中的一个文件。
我有一个创建article 的表单,而article 有多个article_attachments
在 angular 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 确实给出了它正在发送多个文件,如下所示:
但问题出在 Rails 方面,在我的 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"
}
那么这里缺少什么?
【问题讨论】:
-
请求参数哈希是什么?
-
顺便说一句,has_one:文件?还是 has_many 文件?
-
has_many files 关系,我更新了一个请求参数的示例
-
你正在发送一个文件
-
rails 预期文件[] -
标签: ruby-on-rails angularjs restangular