如何在删除之前检查对象是否被引用? (多对多关系)

时间:2012-09-13 12:58:48

标签: ruby-on-rails ruby ruby-on-rails-3 activeadmin

我是 ruby​​ on rails 世界的新手。我有两个类,A和B,并按以下方式定义:

class AClass < ActiveRecord::Base
  has_many :a_b_class
end

class ABClass < ActiveRecord::Base
  validates_presence_of :attr1, :attr2

  belongs_to :a_class
  belongs_to :b_class

  attr_accessible :attr1,:attr2,:a_class, b_class
end

class BClass < ActiveRecord::Base
  validates_presence_of :attr4, :attr5

  has_many :a_b_class

  attr_accessible :attr4,:attr5
end

我正在使用 activeadmin 来管理数据库数据等。 问题是 activeadmin 允许我删除由AClass(通过ABClass关系)对象引用的BClass对象,所以当我进入http://example.com/a_class时视图失败,因为视图尝试访问 nil 元素的attr1。如何为模型添加验证以避免删除引用的对象?

已编辑:我纠正了这段关系,是多对多

2 个答案:

答案 0 :(得分:1)

我认为您的关联在某处首先纠正错误,例如文章有很多评论,所以评论有article_id,评论有validates_presence_of :article_id没有文章,如果删除文章,相应的评论应该删除,因为你需要'依赖=&GT;:消灭“

class Article <AR
 has_many :comments,:dependent=>:destroy
end

class Comment <AR
 belongs_to :article
 attr_accessible :article_id,....
end

答案 1 :(得分:0)

我不确定这会解决问题 - 但您可以尝试将belongs_to属性添加到BClass以标记它属于AClass吗?

belongs_to :a_class

此外,你不能这样做:

validates_presence_of :b_class_id

因为可能有很多ID ..