所以我得到了一个带有remote: true
的表单,当我在表单页面上时,它的工作除外。
但是这种形式应该是模态。当我在不起作用的模态中尝试表单时。
我有 2 个案例:
form_for(@report, remote: true, method: 'post')
这抛出了一个错误,因为它正在寻找一个 html 模板:
ReportsController#create is missing a template for this request format and variant. request.formats: ["text/html"] request.variant: []
和
form_for(@report, format: "js", remote: true, method: 'post')
只需点击 js 视图的链接即可。
我很确定这个错误是由于我异步加载这个表单的事实:
$.ajax({ url: "/form/url" })
但是我不知道该怎么办。
作为补充信息,我使用 Vex lib 进行模态显示。
我遇到了同样的问题,并且仍然试图弄清楚为什么remote: true
无法在模态中工作,但我能够获得相同的行为跳过remote: true
并手动添加ajax
调用。
所以,你也可以解决这个问题;检查我在模态1 中呈现的_form.html.erb
部分中使用的这个(减少的(代码:
<div>
<%= form_tag company_users_url, id: "company-users-form" do |f| %>
Select file: <%= file_field_tag :file %>
<%= submit_tag "Send" %>
<% end %>
<div>
<script>
$("#company-users-form").submit(function(event){
event.preventDefault();
var formData = new FormData($(this)[0]);
$.ajax({
url: '<%= company_users_url %>',
type: 'POST',
data: formData,
async: false,
cache: false,
contentType: false,
enctype: 'multipart/form-data',
processData: false
});
return false;
});
</script>
通过此设置,我首先在打开呈现上述部分的模式的form
上使用常规remote: true
调用。然后,在我发送表单的部分内,现在调用再次作为js
发送,因此我的js.erb
视图正确呈现;就我而言,只是带有新模态内容的一行:
$('#company-users-modal').html("<%= j(@new_content) %>");
1为简单起见,请注意使用 formData
。