我目前遇到的问题是在轨道上摧毁红宝石中的友谊。正在创建友谊(我使用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 %>
请注意,我添加了对友谊存在的检查,因为我一直收到错误声明友情是零,这是我当前的问题。
感谢!!!
答案 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
已经返回了一条记录)