【问题标题】:Rails dependent destroy errorRails 依赖破坏错误
【发布时间】:2013-08-05 08:22:50
【问题描述】:

我有一个 Rails 电影应用程序。显然,还有一张电影桌。电影has_many :comments, :dependent => :destroy 和评论belongs_to :movie。 还有一条评论belongs_to :user,因此当新用户观看电影时,该评论将显示在他们的users#show 页面上。

如果用户评论电影,评论将显示在他们的页面上。我也可以去localhost:3000/comments/:id查看该评论的显示页面

现在我的问题是:

如果我随后销毁或删除带有该评论的电影,则该评论实际上并没有被删除。我仍然可以转到localhost:3000/comments/:id,如果我转到users/:id/reviews(显示用户的cmets)我会收到一个错误,因为该评论仍在显示并且仍然属于电影。 所以我得到了这种错误Unable to find Movie with id = 58

Movies_controller.rbdestroy action有没有办法说什么时候删除电影,同时删除所有带有movie_id => params[:id]的cmets

【问题讨论】:

  • :dependent 应该是这一行中的一个符号:has_many :comments, :dependent => :destroy。如果这是您的实际代码中的拼写错误,请修复并查看是否可以解决问题。该线程可能会帮助您解决有关MoviesController#destroy 操作的问题:stackoverflow.com/questions/3547616/…
  • 我的代码现在不在我身边,但我确实认为在我的模型中冒号已经存在,所以这只是问题而不是代码的问题。已编辑。

标签: ruby-on-rails model-view-controller associations dependent-destroy


【解决方案1】:

还有另一种方法可以删除电影的 cmets:

def destroy
 @movie = Movie.find(params[:id])
 @movie.comments.delete_all
 @movie.destroy
end

【讨论】:

  • 好的,所以这可行,但它会注销用户。因此,通过破坏电影和评论,您也在破坏用户会话
  • 这个问题不是来自我的代码,事实上,问题出在其他地方,我怀疑这就是为什么你的依赖: :destroy 没有工作。将您的日志用于销毁电影动作。
  • 我并不是在暗示这是因为您的代码,而只是因为它触发了它。 gist.github.com/mpcoding/b8c95a7103916baba3dd
  • 显示您的 application.html.erb,或检查您是否在其中包含 <%= csrf_meta_tag %>
  • 您的日志中有一个警告WARNING: Can't verify CSRF token authenticity,我想这可能与此有关。
猜你喜欢
  • 2017-03-14
  • 2015-11-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多