我遇到了这个问题:对于#<user:0xa8dc8b8> </user:0xa8dc8b8>未定义的方法`each'

时间:2011-05-19 22:01:22

标签: ruby-on-rails ruby ruby-on-rails-3

19: <strong>URL</strong> <%= link_to user_path(@user),(@user)%><br />
20: 
21: <strong>Thoughts</strong> <%= @user.thoughts.count %>
22: <% @user.each do |user| %>
23: <li>
24:   <% if Friendship.are_friends(current_user, user) %>
25:     (you are friends)

它在第22行抛出错误。我不明白为什么。我只是想为每个朋友做一个循环。

编辑:1

我实际上是想通过社交网络边栏中的链接发送友情请求。这是它错过的代码:

     <% @user.friendship.each do |user| %>
          <li>
<% if Friendship.are_friends(current_user, user) %>
  (you are friends)
<% elsif current_user != user %>
  (<%= link_to "request friendship", :controller => :friendship, :action => :req, :id => user.name %>)
                <% end %>
                </li>
<% end %>

<h2>Your Friends</h2>
<ol>
<% @user.each do |friendship| %>
  <li><%= friendship.friend.name %>, <%= friendship.status %></li>
<% end %>
</ol>

我已经尝试添加user.friendship,它确实呈现了页面,但没有添加好友的链接。

2 个答案:

答案 0 :(得分:4)

@user是一条记录(一个用户) - 您使用.each循环记录数组,而不是单个记录。

也许你的意思是@user.friends.each do |user|

答案 1 :(得分:2)

首先,你可能需要多元化“友谊”。如果用户has_many:friendships,那么你的代码应该是@ user.friendships.each

其次,@ user.friendships.each将返回友谊,而不是用户。你的模型是如何设置的?假设您有一个用户模型和一个友谊模型。友谊模型应该是这样的:

class Friendship < ActiveRecord::Base
  #attributes should be :person_id, friend_id
  belongs_to :person, :class_name => "User"
  belongs_to :friend, :class_name => "User"
end

用户模型如下:

class User < ActiveRecord::Base
  has_many :friendships, :foreign_key => "person_id", :dependent => :destroy
  has_many :friends, :through => :friendships
end

在这种情况下,您可能希望使用@ user.friends.each而不是@ user.friendships.each。第一个将遍历用户数组,第二个将循环通过友谊。