#<User::ActiveRecord_Relation:0x007fdd1adb7a00> Rails 的未定义方法“友谊”
undefined method `friendships' for #<User::ActiveRecord_Relation:0x007fdd1adb7a00> Rails
我正在通过构建应用程序来学习 Rails。在我将此代码添加到 users_controller.rb
之前,我的应用程序运行良好
def show
@user = User.find(params[:id])
@user = User.order('created_at DESC').paginate(page: params[:page], per_page: 30)
end
def compare
if current_user.profile
@users = User.find_by(id: params[:to].to_i) if params[:to]
@paper_weight_total_user = @users.papers.sum(:paper_weight)
else
redirect_to user_path
end
end
我将此添加到我的 users_controller 中,因为如果当前用户点击 "Compare data" 按钮(如下所示)
,他应该能够将他的数据与他朋友的数据进行比较
<h4> <%= current_user.profile.name%> Friends</h4>
<ul>
<% @user.friendships.each do |friendship| %>
<li>
<%= link_to user_profile_path(friendship.friend), :method => :get do %>
<%= friendship.friend.profile.name %>
(<%= link_to "Remove", friendship, :method => :delete %>)
<%= link_to friendship do %>
<%= link_to 'Send message', new_message_path(to: friendship.friend.id), class: 'btn btn-default btn-xs' %>
<%= link_to friendship do %>
<%= link_to 'compare data', compare_friends_path(to: friendship.friend.id), class: 'btn btn-default btn-xs' %>
<% end %>
<% end %>
<% end %>
<% end %>
</li>
</ul>
compare_friends_path 有效 我能够将我的数据与选定的朋友数据进行比较,但是当我想直接返回 "My page" 时,应用程序给我这个错误:
undefined method `friendships' for #<User::ActiveRecord_Relation:0x007fdd1adb7a00>
并指出这行代码(do 循环)导致错误:
<% @user.friendships.each do |friendship| %>
我的user.rb型号有
has_many :friendships, dependent: :destroy
has_many :friends, through: :friendships
我的 friendship.rb 模型有
belongs_to :user
belongs_to :friend, :class_name => 'User'
belongs_to :profile
在我添加比较选项后,我一直在试图弄清楚为什么现在会发生这种情况,但我运气不好....这里的任何人都可以帮助我或给我建议来解决这个问题。
提前致谢
大地
undefined method `friendships' for #<User::ActiveRecord_Relation:0x007fdd1adb7a00>
根据此错误消息,您的 @user
对象是 ActiveRecord_Relation
对象而不是 User
class 的实例,因此您会收到错误消息。
根据您的模型设置,您可以通过以下方式为特定用户获取 friendships
:@user.friendships
但此 @user
必须是 User
的实例class 但不是 ActiveRecord_Relation
对象。
我认为问题出在您的 show
方法的这一行:
@user = User.order('created_at DESC').paginate(page: params[:page], per_page: 30)
在这种情况下,@user
是一个 ActiveRecord_Relation
对象而不是单个用户。因此,当您在视图中调用 @user.friendships
时,您会收到上述错误。
您可能希望将其重命名为 @users
或更有意义的类似名称,因为这将 return 用户集合。
而且,您已经有一个 @user
定义:
@user = User.find(params[:id])
其中 @user
是 User
class 的实例。
发生这种情况是因为您的 show
操作的第二行覆盖了第一行,因此 @user
实际上是用户数组。
为了能够调用 @user.friendships
,@user
必须是单个用户(用户的实例)。
您可以使用 @user.first.friendships
进行检查。这不会 return 任何错误
我正在通过构建应用程序来学习 Rails。在我将此代码添加到 users_controller.rb
之前,我的应用程序运行良好def show
@user = User.find(params[:id])
@user = User.order('created_at DESC').paginate(page: params[:page], per_page: 30)
end
def compare
if current_user.profile
@users = User.find_by(id: params[:to].to_i) if params[:to]
@paper_weight_total_user = @users.papers.sum(:paper_weight)
else
redirect_to user_path
end
end
我将此添加到我的 users_controller 中,因为如果当前用户点击 "Compare data" 按钮(如下所示)
,他应该能够将他的数据与他朋友的数据进行比较 <h4> <%= current_user.profile.name%> Friends</h4>
<ul>
<% @user.friendships.each do |friendship| %>
<li>
<%= link_to user_profile_path(friendship.friend), :method => :get do %>
<%= friendship.friend.profile.name %>
(<%= link_to "Remove", friendship, :method => :delete %>)
<%= link_to friendship do %>
<%= link_to 'Send message', new_message_path(to: friendship.friend.id), class: 'btn btn-default btn-xs' %>
<%= link_to friendship do %>
<%= link_to 'compare data', compare_friends_path(to: friendship.friend.id), class: 'btn btn-default btn-xs' %>
<% end %>
<% end %>
<% end %>
<% end %>
</li>
</ul>
compare_friends_path 有效 我能够将我的数据与选定的朋友数据进行比较,但是当我想直接返回 "My page" 时,应用程序给我这个错误:
undefined method `friendships' for #<User::ActiveRecord_Relation:0x007fdd1adb7a00>
并指出这行代码(do 循环)导致错误:
<% @user.friendships.each do |friendship| %>
我的user.rb型号有
has_many :friendships, dependent: :destroy
has_many :friends, through: :friendships
我的 friendship.rb 模型有
belongs_to :user
belongs_to :friend, :class_name => 'User'
belongs_to :profile
在我添加比较选项后,我一直在试图弄清楚为什么现在会发生这种情况,但我运气不好....这里的任何人都可以帮助我或给我建议来解决这个问题。
提前致谢 大地
undefined method `friendships' for #<User::ActiveRecord_Relation:0x007fdd1adb7a00>
根据此错误消息,您的 @user
对象是 ActiveRecord_Relation
对象而不是 User
class 的实例,因此您会收到错误消息。
根据您的模型设置,您可以通过以下方式为特定用户获取 friendships
:@user.friendships
但此 @user
必须是 User
的实例class 但不是 ActiveRecord_Relation
对象。
我认为问题出在您的 show
方法的这一行:
@user = User.order('created_at DESC').paginate(page: params[:page], per_page: 30)
在这种情况下,@user
是一个 ActiveRecord_Relation
对象而不是单个用户。因此,当您在视图中调用 @user.friendships
时,您会收到上述错误。
您可能希望将其重命名为 @users
或更有意义的类似名称,因为这将 return 用户集合。
而且,您已经有一个 @user
定义:
@user = User.find(params[:id])
其中 @user
是 User
class 的实例。
发生这种情况是因为您的 show
操作的第二行覆盖了第一行,因此 @user
实际上是用户数组。
为了能够调用 @user.friendships
,@user
必须是单个用户(用户的实例)。
您可以使用 @user.first.friendships
进行检查。这不会 return 任何错误