我遇到了rails forms(remote:true)及其操作的问题。 我正在使用Rails 4。
我有两个部分。首先是包含所有条目的表(例如工作包),其次是添加新条目的表单。我填写表格并通过AJAX发送给我的控制器。之后,表单partial将重新呈现。到目前为止一切都很好。
现在问题是表单处于“编辑模式”:
<form accept-charset="UTF-8" action="/workpackages/290" class="edit_workpackage" data-remote="true" id="edit_workpackage_290" method="post" role="form">
如果我想直接添加另一个工作包,那么这是不可能的,因为我会更改第一个entrie。
如何在创建后确保公式处于“新模式”?
<form accept-charset="UTF-8" action="/workpackages" class="new_workpackage" data-remote="true" id="new_workpackage" method="post" role="form">
可以说我想要哪种表格模式吗?如果我按下“编辑”按钮,应始终可以使用“编辑模式”。
如果我刷新整个表格,表格在“新模式”中是新的。为什么不在ajax之后召唤?
一些代码:
控制器/创建
def create
respond_to do |format|
if (@workpackage.save)
#update current working time on workingtime Account
update_workingtime_account()
#get new infos about workingtime from current day and working account if a new workpackage was created
get_new_workingtime()
flash[:notice] = 'Arbeitspacket erfolgreich erfasst'
format.html { redirect_to @workpackage }
format.js {}
else
format.html { render :new }
flash[:notice] = 'Arbeitspacket konnte nicht gespeichert werden'
format.js {}
end
end
create.js.erb
//AJAX renew Section table
$(document).ready(function() {
$('#workpackage-form').bind('ajax:success', function() {
$('#workpackage-table').html("<%= escape_javascript(render 'workpackages/table') %>");
$('#workpackage-form').html("<%= escape_javascript (render partial: 'workpackages/form') %>");
//re-initialize datetimepicker
$('.datetimepicker').datetimepicker({ format: 'LT' });
});
});
我希望解释清楚。
答案 0 :(得分:0)
Rails自动决定是创建新记录还是为模型更新现有记录,具体取决于其状态(是否持久)。
您不包含表单代码,但我猜您的内容类似于以下内容:
<%= form_for @workpackage do |f| %>
...
<% end %>
当您第一次成功提交表单时,表单会在create
操作的上下文中重新呈现,因此@workpackage
是一个持久对象,它会尝试更新它
如果您始终希望使用该表单进行创建,则可以执行此替换:
<%= form_for Workpackage.new do |f| %>
...
<% end %>
如果您还允许通过相同的表单进行编辑,则常见的模式是将form_for
行从表单部分中取出并将表单对象传递给partial。
<强> new.html.erb 强>
<%= form_for Workpackage.new do |f| %>
<%= render 'form', f: f %>
<% end %>
<强> edit.html.erb 强>
<%= form_for @workpackage do |f| %>
<%= render 'form', f: f %>
<% end %>
<强> _form.html.erb 强>
<%= f.text_field :one %>
<%= f.text_field :two %>
...