Ruby on rails 作家有很多书,有很多顺序。如何确保Writer.books.each、orders.empty?

Ruby on rails 作家有很多书,有很多顺序。如何确保Writer.books.each、orders.empty?,ruby-on-rails,has-many,Ruby On Rails,Has Many,我有一个作家模型,里面有很多书籍。每本书都有许多订单。为了防止不必要的删除,Book模型有一个before_destroy hook方法,以确保它不会在order模型中引用,如中所建议的 Book.rb before_destroy: :ensure_not_referenced_by_any_order def ensure_not_referenced_by_any_order if orders.empty? return true else return fal

我有一个
作家
模型,里面有很多
书籍
。每本
都有许多
订单
。为了防止不必要的删除,
Book
模型有一个before_destroy hook方法,以确保它不会在
order
模型中引用,如中所建议的

Book.rb

before_destroy: :ensure_not_referenced_by_any_order

def ensure_not_referenced_by_any_order
  if orders.empty?
    return true
  else
    return false
  end
end
before_destroy: :ensure_books_not_referenced_by_any_order

def ensure_books_not_referenced_by_any_order
  self.books.each do |book|
    if book.orders.empty?
      return true
    else
      return false
    end
  end
end
我如何为Writer模型编写before\u destroy hook方法,以便Writer.books.each不存在订单?我开始编写下面的内容,但不知道如何确切地编写它

Writer.rb

before_destroy: :ensure_not_referenced_by_any_order

def ensure_not_referenced_by_any_order
  if orders.empty?
    return true
  else
    return false
  end
end
before_destroy: :ensure_books_not_referenced_by_any_order

def ensure_books_not_referenced_by_any_order
  self.books.each do |book|
    if book.orders.empty?
      return true
    else
      return false
    end
  end
end

非常感谢你的帮助

您不应该在没有订单的情况下中止第一本书的循环

def ensure_books_not_referenced_by_any_order
    self.books.each do |book|
        if !book.order.empty?
            return false
        end
    end
    return true
end

你不应该在没有订单的情况下中止第一本书的循环

def ensure_books_not_referenced_by_any_order
    self.books.each do |book|
        if !book.order.empty?
            return false
        end
    end
    return true
end

无法让@Mark的建议发挥作用。仅对书籍使用限制。empty?,这意味着作者必须先删除所有书籍才能删除自己的个人资料

def ensure_has_no_books
  if books.empty?
    return true
  else
    return false
  end
end

请让我知道,如果你对我如何让has\u no\u books\u reference\u by\u any\u order循环正常工作有什么见解,我会接受的。谢谢

无法让@Mark的建议生效。仅对书籍使用限制。empty?,这意味着作者必须先删除所有书籍才能删除自己的个人资料

def ensure_has_no_books
  if books.empty?
    return true
  else
    return false
  end
end

请让我知道,如果你对我如何让has\u no\u books\u reference\u by\u any\u order循环正常工作有什么见解,我会接受的。谢谢

谢谢@Mark。这仍然允许我销毁那些有订单的书籍的用户。我认为它很接近,所以让我来玩一下……嗨@Mark,我已经求助于一个不太理想的解决方案,如我的答案所示。请让我知道你是否知道为什么你的代码在这种情况下不起作用。我的方法中有一个输入错误,应该是
if!book.orders.empty?
(复数顺序),但您肯定已经解决了。谢谢@Mark。这仍然允许我销毁那些有订单的书籍的用户。我认为它很接近,所以让我来玩一下……嗨@Mark,我已经求助于一个不太理想的解决方案,如我的答案所示。请让我知道你是否知道为什么你的代码在这种情况下不起作用。我的方法中有一个输入错误,应该是
if!book.orders.empty?
(复数顺序),但您肯定已经解决了这个问题。代码看起来仍然正确。顺便说一句:您可以将方法缩短为
返回self.books.empty?
。别忘了纠正before\u destroy-hook:
before\u destroy:确保\u没有书籍
。嗯,你的双冒号是故意在“销毁前”之后出现的吗?这不应该在那里…谢谢@Mark。修正了打字错误,但仍然无法让你的工作。。。我想我会选择一个更简单的解决方案,因为它实际上可以防止用户破坏他们自己的配置文件,除非他们真的确定(并通过删除他们自己的书籍来显示)。代码看起来仍然正确。顺便说一句:您可以将方法缩短为
返回self.books.empty?
。别忘了纠正before\u destroy-hook:
before\u destroy:确保\u没有书籍
。嗯,你的双冒号是故意在“销毁前”之后出现的吗?这不应该在那里…谢谢@Mark。修正了打字错误,但仍然无法让你的工作。。。我认为我将采用更简单的解决方案,因为它实际上可能有助于防止用户破坏他们自己的配置文件,除非他们真的确定(并通过删除他们自己的书籍来显示)。