Ruby on rails 模板错误-rails 3中的ajax

Ruby on rails 模板错误-rails 3中的ajax,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我有一个导航菜单,在show.html.erb文件中有两个选项卡/链接,在userscocontroller.rb中,我想使用ajax为选项卡呈现不同的部分 在show.html.erb中,我有一个名为profile data的div,我想在其中显示内容。 所以我做了这样的事情: 链接结构: <li><%= link_to "College friends", college_friends_path, :remote => true %></li> &

我有一个导航菜单,在
show.html.erb
文件中有两个选项卡/链接,在
userscocontroller.rb
中,我想使用ajax为选项卡呈现不同的部分

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"
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
我在我的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
class UsersController
我们最后得到的JS文件是:

<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"
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
*学院之友.js.erb*

$('#profile-data').html("<%= escape_javascript(render(:partial => 'college_friends')) %>");
$('#profile-data').html("<%= escape_javascript(render(:partial => 'highschool_friends')) %>");
$('profile data').html('college\u friends'))%>;
*高中生之友.js.erb*

$('#profile-data').html("<%= escape_javascript(render(:partial => 'college_friends')) %>");
$('#profile-data').html("<%= escape_javascript(render(:partial => 'highschool_friends')) %>");
$('profile data').html('highschool\u friends'))%>;
部分代码:\u college\u 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 %>

马尔默

瓦纳

当我单击链接并在控制台中获得此错误时,不会发生任何事情:

<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"
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
2012-07-29 01:53:39+0200开始获得127.0.0.1版的“大学之友”
由UsersController#universitet#u friends作为JS处理
呈现用户/_universite_friends.html.erb(1.6ms)
渲染用户/universitet_friends.js.erb(3.1ms)
在7毫秒内完成500个内部服务器错误
ActionView::Template::Error(未定义nil:NilClass的“friends”方法):
1: 
2: 
三:
4: 
app/views/users/\u universite\u friends.html.erb:1:in``应用程序视图\u用户\u universite\u friends\u html\u erb\u 1983680250475155079\u 70236040373720'
app/views/users/universite\u friends.js.erb:1:in``应用程序视图\u用户\u universite\u friends\u js\u erb\u 13173628506668628869\u 70236044930260'
app/controllers/users\u controller.rb:19:in'universite\u friends
任何帮助都将不胜感激

ActionView::Template::Error(未定义的“friends”方法用于 无:无类别):


这表明@user变量为nil。这是因为当您返回控制器进行AJAX请求时,实际上从未设置@user变量。它不会在请求之间持久存在。您需要在ajax请求期间传递该变量。一种方法是向ajax URL添加一个用户id参数。

也许你也可以这样做

@user.id),:remote=>true%>

但是,最好的方法是将user_id参数传递到ajaxurl..您可以在链接“on click”事件上触发ajax请求