所以我收到了一张remote: true
的表单,当我在表单页面上时,它就像例外一样。
但是这种形式应该是一种模式。 当我在模态中尝试不起作用的表单时。
我有两个案例:
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进行模态显示。
答案 0 :(得分:1)
我遇到了同样的问题,仍然试图弄清楚为什么 remote: true
在一个模态中工作,但我能够得到相同的行为跳过{{ 1}}并手动添加remote: true
来电。
所以,你也可以绕过这个;检查我在模式 1 中呈现的ajax
部分中使用的这个(简化)代码:
_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>
上使用常规remote: true
调用,打开一个呈现上述部分的模式。然后,在我发送表单的部分内,现在呼叫将再次作为form
发送,因此我的js
视图会正确呈现;在我的例子中只是一个新的模态内容:
js.erb
1 请注意使用$('#company-users-modal').html("<%= j(@new_content) %>");
来简化。