如何防止我的上一个嵌套属性被销毁?

时间:2012-09-23 11:05:05

标签: ruby-on-rails activerecord callback nested-attributes

我有一个像这样的手机型号的客户型号;

class Customer < ActiveRecord::Base
  has_many :phones, as: :phoneable, dependent: :destroy
  accepts_nested_attributes_for :phones, allow_destroy: true
end

class Phone < ActiveRecord::Base
  belongs_to :phoneable, polymorphic: true
end

我想确保客户始终拥有至少一个嵌套手机型号。目前我在浏览器中管理这个,但我想在服务器上提供备份(我遇到了几个没有手机的客户记录,不太清楚他们是怎么做到的,所以我需要一个支持)

我认为这在模型中必须是可以实现的,但我不太清楚如何做到这一点。到目前为止,我所有的尝试都失败了。我认为手机型号中的before_destroy回调是我想要的,但我不知道如何写这个来防止模型的破坏。如果父模型已被销毁,我还需要它来允许销毁模型。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

你可以这样做:

before_destory :check_phone_count

def check_phone_count
  errors.add :base, "At least one phone must be present" unless phonable.phones.count > 1
end