在ruby on rails上显示表单提交时没有页面刷新的结果数据

时间:2012-07-03 05:29:03

标签: ruby-on-rails ruby jquery partial-page-refresh form-submit

我在铁轨上的红宝石上很新。我遇到了问题。我有一个主题列表,在这个列表下面我有一个表单来添加主题。我正在尝试添加没有页面刷新的主题,并在主题列表下方显示此主题。新添加的主题是在数据库中插入但没有页面刷新时它不会显示在列表的底部。 这是我的控制器(subject_controller.rb)

    class SubjectController < ApplicationController
    layout 'standard'
    def list
        @subjects = Subject.find(:all)
    end
   def show
        @subject = Subject.find(params[:id])
   end
   def create
        @subject = Subject.new(params[:subject])
        if @subject.save
            render :partial => 'subject', :object => @subject
        end
   end
end  

这是我的部分文件(_subject.html.erb)

<li id="subject_<%= subject.id %>">
<%= link_to subject.name, :action => 'show', :id => subject.id %>
<%= "(#{subject.books.count})" -%>
</li>

这是我的视图页面(list.html.erb)

<ul id="subject_list">
<% @subjects.each do |c| %>
<li><%= link_to c.name, :action => 'show', :id => c.id %>
<%= "(#{c.books.count})" -%></li>
<% end %>
</ul>
<div id="add_subject">
<%= form_for(:subject, :url => {:action => 'create'},
     :update => "subject_list", :position => :bottom,
     :html => {:id => 'subject_form'}, :remote => true) do %>
Name: <%= text_field "subject", "name" %>
<%= submit_tag 'Add', :id => 'create_button', :onClick => 'javascript:submitForm();' %>
<% end %>
</div>

这是我的js文件

function submitForm(){
jQuery.ajax({
        type: 'POST',
        //url: "/subject/create",
        data:jQuery('#subject_form').serialize(),
        error: function(){  },
        success: function(data){ alert(data) },
        complete: function (){   }
        });
    return false;
 }

我正在使用ruby 1.9.3和rails 3.2.6

1 个答案:

答案 0 :(得分:0)

您应该执行以下操作 -

  1. 在list.html.erb中替换

    <%= submit_tag 'Add', :id => 'create_button', :onClick => 'javascript:submitForm();' %>
    
  2. <%= submit_tag 'Add', :id => 'create_button' %>
    

    2。使用以下内容创建新视图create.js.erb -

    $("#subject_list").innerHTML += "<%= escape_javascript(render(:partial => 'subject')) %>"
    

    3。更新控制器方法 -

        if @subject.save
            #render :partial => 'subject', :object => @subject
            respond_to do |format|
                format.js
            end
        end
    

    4。最后在你的主题部分使用实例变量“@subject”而不是“subject”并丢弃你的js文件。