我的目标是能够删除用户个人资料中的朋友。以下是我到目前为止的情况:
我的friendships_controller.rb中的代码:
def destroy
@user.friends.destroy
end
路线:
get "/friendships" => 'friendships#destroy', as: 'destroy_friendship'
User.rb型号:
class User < ActiveRecord::Base
has_many :friendships
has_many :friends, through: :friendships
def friends
friendships = Friendship.where(user_id: self.id) #here the self refers to the native user id. USER OBJECT
friend_list = Array.new
friendships.each do |friendship|
friend_list << User.find_by_id(friendship.friendship_id)
end
return friend_list.uniq
end
Friendship.rb模型:
belongs_to :user
belongs_to :friend, class_name: "User"
用户显示页面:
<b>Friends</b>
<% @user.friends.each do |friend| %><br />
<%= friend.name %>
<%= link_to "Remove", friend, method: :delete %>
<%end%>
我对如何解决这个问题非常困惑。特别是因为错误undefined method
朋友&#39;为零:NilClass`。即使它是一个帮助方法,所以不应该随处可用吗?
答案 0 :(得分:1)
这是因为@user
对象是nil
。您无需在friends
模型中编写Friendhips
方法。当你写
has_many:朋友
在您的用户模型中,Rails为您提供了这个朋友方法,该方法将返回单个用户的所有朋友。
答案 1 :(得分:0)
试试这个
<% @user.friends.each do |friend| %><br />
<%= friend.name %>
<%= link_to "Remove", friend, method: :delete %>
<%end%>
答案 2 :(得分:0)
这里有几个问题。
1)如果你想破坏友谊,但不要从数据库中删除朋友的账号,你需要破坏用户的友谊,而不是用户的'朋友'
所以对于用户的show文件,你可以这样做(虽然它有点不同寻常):
<b>Friends</b>
<% @user.friendships.each do |friendship| %><br />
<%= friendship.friend.name %>
<%= link_to "Remove", friendship, method: :delete %>
<%end%>
在您的友谊控制器中,您可以使用默认的销毁操作,其中删除的是@friendship
friendships_controller.rb
def destroy
@friendship.destroy
end