1

Writerhas_manyというモデルがありbooksます。それぞれbookhas_many orders。不要な削除を防ぐために、Bookモデルには before_destroy フック メソッドがあり、 PragProg Agile Web Dev (p.7)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

Writer モデルの before_destroy フック メソッドを作成して、Writer.books.each に注文が存在しないようにするにはどうすればよいですか? 以下を書き始めましたが、正確な書き方がわかりません。

Writer.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 に答える