8

我有两个 ActiveRecord 模型:

class Foo < ActiveRecord::Base
  has_many :bars,:dependent=>:destroy
end

class Bar < ActiveRecord::Base
  belongs_to :foo
end

我的设计规定Bar需要关联到Foo,但Foo仅关联到Bar数据库依赖项 - 以确保在Foo删除 的实例时,所有关联的实例Bar也将被删除。除此之外,使用的代码Foo不应该知道Bar,并且我不希望可以从Foo对象访问关联方法。

我试过在声明private之前has_many声明Foo,但它不起作用(我猜它只适用于直接用def...声明的方法)。

有没有办法使关联成为私有,或者在不创建Bar关联的情况下实现数据库依赖Foo

4

1 回答 1

14

您必须在调用之后private放置声明,因为直到那时才定义关联的方法:has_many

class Foo < ActiveRecord::Base
  has_many :bars, :dependent => :destroy
  private :bars, :bars=
end

Foo.first.bars
#=> #<NoMethodError: private method `registrations' called for #<Foo:0x007fc767adca88>>
于 2012-08-26T16:42:15.063 回答