在RAILS 4中通过Ajax提交表单后,如何更新视图模板?

我试图在轨道中围绕ajax表单并在我的表单上使用Remote => True。

现在这个工作,当我点击添加新主题。 以下将发生

1.form partial将被附加到正文(这里面有表格)2.Bootstrap Modal将在里面显示表格3.一旦我点击提交,模态将消失,数据将被存储(成功)

我的问题是原始的Index.html.erb视图现在是陈旧的,因为数据插入到我的数据库中,视图仍然显示旧数据。

一旦表单通过ajax成功提交后,如何触发我的视图更新?

谢谢!!

我的subject.rb控制器

def new @subject = Subject.new({:name => "Default"}) @subject_count= Subject.count + 1 end def create @subject = Subject.new(subject_params) if @subject.save flash[:toastr] = ["success",'Subject #{@subject.name} successfully created'] respond_to do |format| format.html {redirect_to(:action => "index")} format.js end else @subject_count= Subject.count+1 render('new') end end 

这是我的索引视图

  <tr class="">       'show', :id => subject.id}, :class => 'action show') %>  'edit', :id => subject.id}, :class => 'action edit') %>  'delete', :id => subject.id}, :class => 'action delete') %>    

我的new.js.erb

 $('body').append('  "form") %>') $('#modalform').modal('show') 

我的create.js.erb

 $('#modalform').modal('hide') 

让我们重构你的索引文件代码并将@subjects放在另一个部分代码中。 因为,在创建操作之后,我们需要刷新具有更新主题列表的特定div。

 #app/views/subjects/index.html.erb 
<%= render 'subjects %>

现在,使用此部分来保存您的主题列表:

  #app/views/subjects/ _subjects.html.erb <% @subjects.each do |subject| %>  <%= subject.position %> <%= subject.name %> <%= status_tag(subject.visible) %> <%= subject.pages.size %>  <%= link_to "Show", subject, :class => 'action show') %> <%= link_to "Edit", edit_subject_path(subject), :class => 'action edit' %> <%= link_to "Delete", subject, method: :delete, :class => 'action delete' %>   <% end %> 

现在,在执行创建操作后,您需要刷新已加载的数据。 您目前位于索引页面中。

你需要这样做:

 # app/controllers/subjects_controller.rb def create @subject = Subject.new(subject_params) if @subject.save flash[:toastr] = ["success",'Subject #{@subject.name} successfully created'] @subjects = Subject.all # As, you are in index page & when you refresh the specific div(subject_list) # this badly needs the @users (all users list again) # Don't forget to reinitialize any other instance variable if you are using # in index.html.erb file. respond_to do |format| format.html {redirect_to(:action => "index")} format.js end else @subject_count= Subject.count+1 render :new end end #end of create action. 

现在在你的create.js.erb文件中你需要刷新特定的div,它基本上包含主题列表部分(#subject_list div)

  # app/views/subjects/create.js.erb $('#modalform').modal('hide') $("#subject_list").html("<%= escape_javascript( render(:partial => "subjects")) %>"); 

使用最后一个escape_javascript行,我们只是刷新subject_list div并使用更新的@subjects列表再次呈现部分’subject’(我们再次在create action中重新初始化。)希望有帮助:)