簡體   English   中英

顯示結果數據而無需刷新頁面即可在Rails中使用ruby刷新頁面

[英]Display result data without page refresh on form submission in ruby on rails

我是紅寶石的新手。 我陷入了一個問題。 我有一個主題列表,在這個列表下方,我有一個添加主題的表格。 我正在嘗試添加主題而不刷新頁面,並在主題列表下方顯示該主題。 新添加的主題正在數據庫中插入,但沒有頁面刷新就不會顯示在列表底部。 這是我的控制器(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. 在您的list.html.erb中替換

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

<%= 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文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM