2012-07-29 37 views
0

我在show.html.erb文件中有一個帶有2個選項卡/鏈接的導航菜單,在UsersController.rb中,我想使用ajax爲選項卡呈現不同的部分。模板錯誤-ajax in rails 3

show.html.erb我有一個名爲profile-data的div,我想顯示內容。 所以我做這樣的事情:

鏈接結構:

<li><%= link_to "College friends", college_friends_path, :remote => true %></li> 
<li><%= link_to "Highschool friends", highschool_friends_path, :remote => true %></li> 

我定義路線:

match "college_friends" => "users#college_friends", :as => "college_friends" 
match "highschool_friends" => "users#highschool_friends, :as => "highschool_friends" 

我在必要我UserController.rb定義方法:

class UsersController < ApplicationController 
    def show 
    @user = User.find(params[:id]) 
    end 

    def college_friends 
    respond_to do |format| 
     format.js 
    end 
    end 

    def highschool_friends 
    respond_to do |format| 
     format.js 
    end 
    end 
end 

最後一件事,我們有JS文件:

* college_friends.js.erb *

$('#profile-data').html("<%= escape_javascript(render(:partial => 'college_friends')) %>"); 

* highschool_friends.js.erb *

$('#profile-data').html("<%= escape_javascript(render(:partial => 'highschool_friends')) %>"); 

部分碼:_college_friends.html.erb

<% groups = @user.friends.group_by(&:college_name) %> 
<% sorted_groups = groups.sort_by{|key, values| values.count}.reverse %> 
<% sorted_groups.each do |collegename, friends| %> 
<% next if collegename.blank? %> 
<div class="contentbox"> 
    <div class="box-header"> 
     <h3><%= collegename %></h3> 
     <div class="meta-info"> 
      <p><i class="icon-map-marker"></i> Malmö</p> 
      <p><i class="icon-user"></i><span class="count"> <%= friends.count %></span> vänner</p> 
     </div> 
    </div> 
    <ul class="friends-list"> 
     <% friends.map do |friend| %> 
     <li><%= image_tag(friend.image) %> 
      <% end %> 
     </ul> 
    </div> 
<% end %> 

沒有任何反應,當我點擊了鏈接,並在控制檯收到此錯誤:

Started GET "/universitet_friends" for 127.0.0.1 at 2012-07-29 01:53:39 +0200 
Processing by UsersController#universitet_friends as JS 
    Rendered users/_universitet_friends.html.erb (1.6ms) 
    Rendered users/universitet_friends.js.erb (3.1ms) 
Completed 500 Internal Server Error in 7ms 

ActionView::Template::Error (undefined method `friends' for nil:NilClass): 
    1: <% groups = @user.friends.group_by(&:college_name) %> 
    2: <% sorted_groups = groups.sort_by{|key, values| values.count}.reverse %> 
    3: <% sorted_groups.each do |collegename, friends| %> 
    4: <% next if collegename.blank? %> 
    app/views/users/_universitet_friends.html.erb:1:in `_app_views_users__universitet_friends_html_erb___1983680250475155079_70236040373720' 
    app/views/users/universitet_friends.js.erb:1:in `_app_views_users_universitet_friends_js_erb__1317362850668628869_70236044930260' 
    app/controllers/users_controller.rb:19:in `universitet_friends 

任何幫助,將不勝感激。

回答

0

::的ActionView ::模板錯誤(未定義的方法'朋友的 零:NilClass):

這是告訴你,你的@user變量是零。發生這種情況的原因是,當您返回到您的控制器以獲取AJAX請求時,您從來沒有真正設置@user變量。它不會在請求之間持續存在。您需要在ajax請求期間傳遞該變量。一種方法是在ajax URL中添加一個user_id參數。

+0

請問你能舉個例子嗎 – SHUMAcupcake 2012-07-29 00:20:16

0

可能是你可以做這樣的事情太

<%=link_to "Highschool friends", college_friends_path(:user_id => @user.id), :remote => true %>

但是這樣做將是通過USER_ID參數去阿賈克斯url..you可以發射鏈路Ajax請求「的最佳途徑點擊「事件。