【发布时间】:2020-09-14 02:01:05
【问题描述】:
project_director 表有一个属性状态,它与project 具有 one_to_one 关联。
每次我的页面重新加载时,我都会在提交表单时使用 project_director 表单渲染项目。我从在线资源中尝试了 ajax,但我的页面仍然重新加载。这是我尝试过的。
index.html.erb
<%= form_for ProjectDirector.new do |f| %>
<td>
<table class="approval-table">
<tr>
<td>
<ul>
<div>
<div class="wrapper-class">
<%= f.radio_button :status, true %>
<%= f.label :approve %>
<br>
<%= f.radio_button :status, false %>
<%= f.label :reject %>
</div>
<%=f.hidden_field :project_site_id, value: project_site.id%>
</div>
</ul>
</td>
<td>
<%= f.hidden_field :user_id, value: current_user.id %>
<%= f.submit 'Submit', :class => 'button primary small' %>
</td>
</tr>
</table>
<script>
$(function(){
$("#new_project_director").on("submit", function(event) {
event.preventDefault();
var formData = {
'status': $('input[name=project_director[status]]').val() //for get status
};
console.log(formData);
$.ajax({
url: "/project_directors",
type: "post",
data: formData,
success: function(d) {
alert(d);
}
});
});
})
</script>
</td>
project_directors_controller.rb
def create
@project_director = ProjectDirector.new(remark_params)
if @project_director.save
redirect_to directors_index_path(anchor: 'panel2')
end
end
def remark_params
params.require(:project_director).permit(:status, :projec_id, :user_id)
end
【问题讨论】:
-
你看过Rails remote form handling吗?这可能会有所帮助。您可以在
form_for中设置remote=true(我认为)。这很奇怪,因为即使没有它,您的代码看起来也基本正确。我想知道重定向。如果create端点确实为ajax 做好了准备,您可以只返回head :ok而不是重定向。我想知道重定向是否正在接管?提交时是否看到 console.log 触发? -
@mrrogers 添加了```remote: true```,在一次提交后,下一次提交仍然无法正常工作,直到我重新加载页面。
-
一次提交后控制台出现此错误
Error: Syntax error, unrecognized expression: input[name=project_director[status] -
嗯 - 这是很好的数据。第一次正确不更新页面,对吗?然后第二个失败。我认为
remote=true你可能不需要你的提交处理程序。让我看看我是否可以模拟一个可能有帮助的答案。
标签: ruby-on-rails ajax