1

我有一个Writerhas_many 的模型books。每个bookhas_many orders。为了防止不必要的删除,Book模型有一个 before_destroy 钩子方法,以确保Order模型中没有引用它,如PragProg Agile Web Dev (p.7)中所建议的那样

图书.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

我将如何为 Writer 模型编写 before_destroy 挂钩方法,以便 Writer.books.each 不存在订单?我开始写下面的内容,但无法弄清楚如何写。

作家.rb

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

非常感谢您的帮助!

4

2 回答 2

1

你不应该在没有命令的情况下中止第一本书的循环。

def ensure_books_not_referenced_by_any_order
    self.books.each do |book|
        if !book.order.empty?
            return false
        end
    end
    return true
end
于 2012-09-24T19:51:01.920 回答
0

无法让@Mark 的建议起作用。只对books.empty?进行限制,这意味着作者必须先删除他所有的书才能删除他自己的个人资料。

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

如果您对如何使 has_no_books_reference_by_any_order 循环工作有深入了解,请告诉我,如果可以,我会接受。谢谢!

于 2012-09-24T21:16:49.133 回答