2013-06-22 17 views
8

Ben sol tarafta, Projeler, Bloglar, vb. Gibi linkleri olan bir kenar çubuğu olan bir kullanıcının gösterge tablosu sayfası var. daha sonra ana alanda, sayfaları yenilemek zorunda kalmadan projelerin görünümü yüklenecekti (proje bir proje mermi listesi olurdu). Bunu AJAX ile yapmaya çalışıyorum, ama işler çalışmıyor.AJAX çağrı Kısmi render to Rails 3

Çalışması gerektiğini düşündüğüm şekilde.

match '/dash' => 'users#show' 

Ve sonra, show eylem users_controller.rb yılında denir: /dash kullanıcıları # yönlendirmek üzere yapılandırıldığı show.html.erb

<%= link_to 'Projects', '/dash', remote: true %> 

kenar çubuğu linke tıkladığında böyle config/routes.rb dosyada göstermek denetleyicisi: show.js.erb yürütüldüğü zaman, gerçekleştirilir. Benim show.js.erb dosya bu bir hattı vardır:

$('#ajax').html("<%= escape_javascript(render(:partial => 'projects/index')).html_safe %>"); 

Ve de #ajax div değiştirmek gerekiyordu benim show.html.erb:

<div id="ajax"> 
    <%= render :template => 'projects/index' %> 
</div> 

app/views/projects/index.html.rb @projects alır ve böyle bir liste verir:

<% @projects.each do |project| %> 
    <p><%= project.name %></p> 
<% end %> 

Açıkçası, bir şeyler yapıyorum çünkü bu çalışmıyor. Neyi yanlış yapıyorum? Başka yer değiştirmek zorunda olduğum bir kod var mı? Rails 3.2.13 üzerindeyim, bu yüzden ve //=jquery_ujsapp/assets/javascripts/application.js altındaki satırlar gerekli jQuery ve AJAX işlevlerini almalıydı.

cevap

11

Sorun şu ki, show.js.erb dosyanızda bir kısmi oluşturmaya çalışıyorsunuz ama kısmen değil bir dosya aktarıyorsunuz. Kısmi dosyalar alt çizgi _ ile başlar.

Yani, kod çoğaltma önlemek için, burada öyle yapardım: Ayrıca

# app/views/projects/show.js.erb 
$('#ajax').html("<%= escape_javascript(render :partial => 'index', :locals => { :projects => @projects }) %>"); 

# app/views/projects/index.html.erb 
<%= render :partial => 'index', :locals => { :projects => @projects } %> 

# app/views/projects/**_**index.html.erb 
# Include here the code that you previously had in index.html.erb 
# Don't forget to change @projects to projects 
<% projects.each do |project| %> 
    <p><%= project.name %></p> 
<% end %> 

, hemen hemen erişilebilir olmasını yolları ihtiyaç asla sunduğundan rotalara match kullanmamalısınız hem GET ve POST yöntemleri. Yani match yerine get kullanmayı deneyin.