我在铁轨上的红宝石很新。 我遇到了问题。 我有一个主题列表,在这个列表下面我有一个表单来添加主题。 我正在尝试添加没有页面刷新的主题,并在主题列表下方显示此主题。 新添加的主题是插入数据库,但没有页面刷新,它不会显示在列表的底部。 这是我的控制器(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
I’m very new in ruby on rails. I’m stuck with a problem. I have a list of subjects and below this list I have a form to add subject. I’m trying to add a subject without page refresh and display this subject just below the list of subject. New added subject is inserting in database but it’s not displaying in bottom of list without page refresh. Here is my controller (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 endHere is my partial file (_subject.html.erb)
<li id="subject_<%= subject.id %>"> <%= link_to subject.name, :action => 'show', :id => subject.id %> <%= "(#{subject.books.count})" -%> </li>Here is my view page (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>Here is my js file
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; }I'm using ruby 1.9.3 and rails 3.2.6
最满意答案
你应该做以下事情 -
在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 end4.最后在你的主题部分使用实例变量“@subject”而不是“subject”并丢弃你的js文件。
you should do the following -
In your list.html.erb replace
<%= submit_tag 'Add', :id => 'create_button', :onClick => 'javascript:submitForm();' %>with
<%= submit_tag 'Add', :id => 'create_button' %>2. Create a new view create.js.erb with the following content -
$("#subject_list").innerHTML += "<%= escape_javascript(render(:partial => 'subject')) %>"3. Update your controller method -
if @subject.save #render :partial => 'subject', :object => @subject respond_to do |format| format.js end end4. And finally in your subject partial use instance variable "@subject" instead of "subject" and discard your js file.
更多推荐
发布评论