有一个有趣的任务:我的活跃记录' 活动 '实体可以包含一个' 附件' PDF文件。在“创建活动”页面上,用户可以在提交该活动之前上传此附件。附件通过Ajax上传到Amazon,进度条显示等blablabla 。 它应该显示在in_a_way:
= form_for @event do |e|
= e.text_field :name
= form_for @attach, :remote=>true, html=>{:multipart=>true} do |at|
= at.file_field :pdf, :accept=>"pdf", :size=>"1"
= at.submit
= e.submit
是的,这只是伪代码,我不介意它是如何工作的,但主要的想法是礼物: [提交附件] 按钮应放在在里面事件表格。 我如何实现它?也许,只需对嵌套的Attachment表单进行一些偏移,这样它就会显示在Event表单中,还是有其他解决方案?
............................................... ....... ...................................... ..............
答案 0 :(得分:1)
解决方案:覆盖表单标题 这是用于创建新事件的表单。 在此表单中,我们需要ajax文件上传。 有一个解决方案:在两种不同类型的提交之间混合单一形式:ajax(js)和html:
= form_for @event, html=>{:multipart=>true} do |e|
= e.text_field :name
= file_field_tag "attach[pdf]", :id=>"attach_pdf", :accept => "pdf", :maxlength => "200"
= submit_tag "", :id => "ajax_submit", :style=>"display:none"
= e.submit <!-- id = "new_event_submit" -->
////////////////////////////
// before 'submits' call override functions:
$("#ajax_submit").click(function(){
prepeareFormForAjax();
return true;
});
$("#new_event_submit").click(function(){
prepeareFormForHtml();
return true;
});
//////////////////////////////
// to store original (previous, html) form data
var html_form_action = "";
var html_form_method = "";
///////////////////////////////
/*
* To ajax file upload:
**/
function prepeareFormForAjax() {
$("form").attr("data-remote", "true");
$("form").attr("enctype", "multipart/form-data");
html_form_action = $("form").attr("action"); // save old action
$("form").attr("action", "/attach"); // I need /nors action
//_method field is a hidden form field, maybe you have it too on the page:
if ($('input[name="_method"]').length != 0) {
html_form_method = $('input[name="_method"]').val();
$('input[name="_method"]').val("post");
}
}
function prepeareFormForHtml() {
$("form").removeAttr("data-remote");
$("form").removeAttr("enctype");
if (html_form_action != "") {
$("form").attr("action", html_form_action);
html_form_action = "";
}
if (html_form_method != "") {
$('input[name="_method"]').val(html_form_method);
html_form_method = "";
}
}
///////////////////////
现在,通过AJAX上传文件:
$("#ajax_submit").click();
有任何问题吗?