1

私はRubyonRailsの初心者です。私は問題で立ち往生しています。件名のリストがあり、このリストの下に件名を追加するためのフォームがあります。ページを更新せずに件名を追加し、件名のリストのすぐ下にこの件名を表示しようとしています。新しく追加された件名がデータベースに挿入されていますが、ページを更新しないとリストの下部に表示されません。これが私のコントローラー(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;
 }

私はruby1.9.3とrails3.2.6を使用しています

4

1 に答える 1

0

次のことを行う必要があります-

  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 ファイルを破棄します。

于 2012-07-04T05:00:46.997 に答える