Rails属于依赖性毁灭

时间:2011-12-30 02:13:51

标签: ruby-on-rails ruby activerecord

检查模型关系是否在另一个模型中使用以防止其被破坏从而创建孤儿的最佳方法是什么。

示例:我有Ticket和TicketStatus模型。 TicketStatus属于Ticket。 Ticket has_many TicketStatuses。

如果TicketStatus已经分配给故障单,我应该无法删除它。我也想要一条错误信息。

2 个答案:

答案 0 :(得分:3)

最简单的回调方式:

class TicketStatus < ActiveRecord::Base
  belongs_to :ticket
  before_destroy :check_ticket

  private

  def check_ticket
    if ticket != nil
      errors.add_to_base("cannot delete ticket status that has a ticket")
      return false
    end
  end
end

这可以防止它并给你一个错误。

希望这有帮助!

答案 1 :(得分:2)

使用before_destroy callback,并确保return false取消即将删除。