Ruby on rails:依赖destroy不使用重命名的外键

时间:2017-03-09 22:55:59

标签: ruby-on-rails associations

我没有找到任何相关主题,所以我自己提出了一个新问题。 我有以下型号。我在类User中添加了foreign_key: :sender,因为模型类:sender的字段名Comment与模型类User不同。 我将dependent: :destroy添加到了课程User,以确保删除用户的所有注释都会被删除。 但是,当我销毁用户时,他们的评论不会被破坏。评论仍保留在数据库中。我不明白为什么。

class Comment < ApplicationRecord
  belongs_to :sender, :class_name => "User"
  belongs_to :event
end

class User < ApplicationRecord     
  has_many :comments, dependent: :destroy, foreign_key: :sender
end

class CommentsController < ApplicationController
<snip>
def destroy
    @event = Event.find(params[:event_id]) # dont mind this line
    @comment = Comment.find(params[:id])
    @comment.destroy
    redirect_to event_path(@event) # dont mind this either
  end
<snip>
end

class UsersController < ApplicationController
<snip>
def destroy
    @user = User.find(params[:id])
    @user.destroy

    redirect_to users_path
  end
<snip>
end

1 个答案:

答案 0 :(得分:1)

我设法通过将foreign_key: :sender更改为foreign_key: :sender_id来解决此问题。换句话说,必须提供真实的数据库列:sender_id而不是字段名:sender

然而,当我使用foreign_key: :sender之前我没有从rails获得任何错误。它只是在删除用户时没有删除注释。 如果有人能解释为什么我没有看到任何错误,我想听听你的意见。