【问题标题】:Ruby on Rails: form problems after ajax submissionRuby on Rails:ajax 提交后的表单问题
【发布时间】:2015-09-17 19:45:21
【问题描述】:

我在使用 rails 表单(远程:true)及其操作时遇到问题。 我正在使用 Rails 4。

我有两个部分。首先是一个包含所有条目的表格(例如工作包),其次是一个用于添加新条目的表格。我填写表格并通过 AJAX 将其发送到我的控制器。之后,表单部分将重新呈现。到目前为止一切顺利。

现在是表单处于“编辑模式”的问题:

<form accept-charset="UTF-8" action="/workpackages/290"   class="edit_workpackage" data-remote="true" id="edit_workpackage_290" method="post" role="form">

如果我现在想直接添加另一个工作包,这是不可能的,因为我会更改第一个条目。

如何确保公式在创建后处于“新模式”?

<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' });

}); 

});

我希望解释足够清楚。

【问题讨论】:

    标签: jquery ruby-on-rails ruby ajax forms


    【解决方案1】:

    Rails 会根据模型的状态(是否持久化)自动决定是创建新记录还是更新现有记录。

    您没有包含表单代码,但我猜您有类似于以下内容:

    <%= form_for @workpackage do |f| %>
       ...
    <% end %>
    

    当您第一次成功提交表单时,表单会在create 操作的上下文中重新呈现,因此@workpackage 是一个持久对象,它会尝试更新它。

    如果您总是想使用该表单进行创建,则可以进行此替换:

    <%= form_for Workpackage.new do |f| %>
      ...
    <% end %>
    

    如果您还允许通过同一个表单进行编辑,一个常见的模式是从表单部分中取出form_for 行并将表单对象传递给部分。

    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 %>
    ...
    

    【讨论】:

    • 谢谢,我想这对我有帮助:)!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 2015-10-16
    相关资源
    最近更新 更多