Ruby on rails 使用before#u destroy删除另一个模型';谁的条目?
所以我有一个模型,我们称之为笔记。在笔记上,你只能写几篇文章。因此,notes模型有一行:Ruby on rails 使用before#u destroy删除另一个模型';谁的条目?,ruby-on-rails,ruby-on-rails-3,destroy,Ruby On Rails,Ruby On Rails 3,Destroy,所以我有一个模型,我们称之为笔记。在笔记上,你只能写几篇文章。因此,notes模型有一行: has_many :posts 而posts模型有这样一条线 belongs_to :note 现在,当一个用户销毁一篇帖子时,我希望如果它不再有任何其他帖子,那么这个便笺也会被销毁 我想我会用before_destroy将此代码写入post模型: def delete_note_if_last_post if self.note.posts.count == 1 self.
has_many :posts
而posts模型有这样一条线
belongs_to :note
现在,当一个用户销毁一篇帖子时,我希望如果它不再有任何其他帖子,那么这个便笺也会被销毁
我想我会用before_destroy将此代码写入post模型:
def delete_note_if_last_post
if self.note.posts.count == 1
self.note.destroy
end
end
这不管用。它根据“非法指令”关闭服务器。有什么方法可以完成我想做的事情吗
编辑:更改了代码,因为我注意到一个错误,现在问题略有不同。我建议将这种逻辑放入观察者中。差不多
class PostObserver < ActiveRecord::Observer
def after_destroy(post)
note = Note.find(post.note_id)
note.destroy if note.posts.count == 0
end
end
class PostObserver
您还必须在config/application.rb文件中注册观察者。需要注意的一点是,如果您的回调返回任何可以计算为false的值(例如nil或false),那么其余的回调将不会运行。您可以返回false以防止在销毁前过滤器中销毁模型
before_destroy :has_no_post
然后在没有职位
def has_no_post
#You can prevent this from deletion by using these options
#Option1 return false on certain condition
return false if posts.any?
#or add an error to errors
errors << "Can not delete note if it has post" if posts.any?
#raise an exception
raise "Cant delete ..." if blah blah
def没有post
#您可以使用这些选项防止删除此项
#选项1在某些情况下返回false
如果有,返回false?
#或者将错误添加到错误中
此外,实际的错误也会有帮助。这可能是因为您的代码正常工作,但其他原因导致了“非法指令”错误。Naveed我认为您的意思是提高“不能删除…”而不是rails“不能删除…”