模板错误-ajax in rails 3
问题描述:
我在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
任何帮助,将不胜感激。
答
::的ActionView ::模板错误(未定义的方法'朋友的 零:NilClass):
这是告诉你,你的@user变量是零。发生这种情况的原因是,当您返回到您的控制器以获取AJAX请求时,您从来没有真正设置@user变量。它不会在请求之间持续存在。您需要在ajax请求期间传递该变量。一种方法是在ajax URL中添加一个user_id参数。
答
可能是你可以做这样的事情太
<%=link_to "Highschool friends", college_friends_path(:user_id => @user.id), :remote => true %>
但是这样做将是通过USER_ID参数去阿贾克斯url..you可以发射链路Ajax请求“的最佳途径点击“事件。
请问你能举个例子吗 – SHUMAcupcake 2012-07-29 00:20:16