rails 4.1未定义的nil类方法

时间:2015-01-08 11:27:20

标签: ruby-on-rails-4.1

您好我正在尝试显示当前用户的朋友列表/或可能正在等待的朋友,但我收到了类似这样的错误

NoMethodError in UserFriendships#index
undefined method `each' for nil:NilClass

这是显示错误

的内容
<% @user_friendships.each do |friendship| %>

这是我在控制器中的代码

before_filter :authenticate_user!
def index
    @user_friendship = current_user.user_friendships.all
end

这是索引中的代码

<% @user_friendships.each do |friendship| %>
    <% friend = friendship.friend %>
    <div id="<%= dom_id(friendship) %>" class="friend now">
        <div class="span1">
            <%= link_to image_tag(friend.gravatar_url), profile_path(friend) %>
        </div>
    </div>
</div>
<% end %>

我已经在我的控制器中定义了@user_friendship但似乎它不能正常工作我在这里有点新鲜并且把事情放在一起,但是这个错误使我无法继续前进,如果有人可以帮助我那将是很好的!

1 个答案:

答案 0 :(得分:1)

Rails无法在current_user上看到您定义的方法user_friendships,因此@user_friendship是nill。

为了您的使用,您只需要直接在id上致电current_user,例如

@user_id = current_user.id

然后,您可以在数据库中搜索具有此特定ID的用户

@current_user = User.find(@user_id)

所以,在你的情况下,你可以获得这个新@current_user的任何方法;

def index
    @user_friendship = @current_user.user_friendships.all
end

继续列表

<% @user_friendships.each do |friendship| %>

Rails是一个MVC框架,意思是模型,视图和控制器。模型主要用于实现数据库(如MYSql)和控制器之间的通信。视图基本上是用户看到的内容(如HTML,CSS),它们通过Controller进行通信和掌握所需的数据。控制器做得最多。 Controller接收来自用户的请求,通过模型将请求指向数据库,并将结果返回给视图。所有这些都是由Controller在服务器的帮助下完成的。有关Rails MVC框架和MVC的进一步说明,请查看这些链接

How are Model, View and Controller connected?

What is MVC in Ruby on Rails?

http://betterexplained.com/articles/intermediate-rails-understanding-models-views-and-controllers/

http://www.codelearn.org/ruby-on-rails-tutorial/mvc-in-rails

http://blog.codinghorror.com/understanding-model-view-controller/