在Ruby on Rails上破坏友谊

时间:2016-03-27 16:23:16

标签: ruby-on-rails ruby

我目前遇到的问题是在轨道上摧毁红宝石中的友谊。正在创建友谊(我使用rails控制台对此进行了测试),但删除友谊无效。

以下是我的控制器代码:

class FriendshipsController < ApplicationController

  def create
    @current_friend = User.find(params[:friend_id])
    @friendship = current_user.friendships.build(:friend_id => @current_friend.id)
    @friendship_2 = @current_friend.friendships.build(:friend_id => current_user.id)
    if @friendship.save && @friendship_2.save
       flash[:notice] = "Friend added"
       redirect_to current_user
    else
      flash[:notice] = "Can not add friend"
      redirect_to current_user
    end
  end

  def destroy
    @friendship = current_user.friendships.find_by(friend_id: params[:id]).first
    if @friendship.exists? 
      @friendship.destroy
    end
    @friendship_2 = Friendship.where(user_id: params[:id], friend_id: current_user.id).first
    if @friendship_2.exists?
      @friendship_2.destroy
    end
    flash[:notice] = "Friendship destroyed"
    redirect_to current_user
  end
end

以下是删除友情的表格:

<%= form_for(current_user.friendships.find_by(friend_id: @user.id),
         html: { method: :delete }) do |f| %>
  <%= f.submit "Unfriend", class: "btn" %>
<% end %>

请注意,我添加了对友谊存在的检查,因为我一直收到错误声明友情是零,这是我当前的问题。

感谢!!!

1 个答案:

答案 0 :(得分:0)

在您看来,您正在通过friend_id(您正在提供@user.id)查找友谊, Friendship 是什么您发送到form_for,因此您的表单将包含 :id Friendship

但是在您的destroy操作中,您在查询中使用params[:id](友情ID)作为 friend_id (您之前演示的应该是{{} 1}} ID不是User ID。

您的代码应该是:

Friendship

(你根本不应该对此@friendship = current_user.friendships.find_by(id: params[:id]) 进行调用,因为.first已经返回了一条记录)