在Ruby on Rails中删除朋友

时间:2015-08-07 03:18:05

标签: ruby-on-rails

我的目标是能够删除用户个人资料中的朋友。以下是我到目前为止的情况:

我的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`。即使它是一个帮助方法,所以不应该随处可用吗?

3 个答案:

答案 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