2012-08-26 56 views
5

我有两个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对象访问关联方法。

我已经试过has_many声明之前宣布privateFoo,但它不工作(我猜它仅适用于直接与def ...声明的方法)。

有没有什么办法让联想私人,或实现无创造Foo一个Bar关联数据库的依赖?

回答

11

你必须把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>> 
+1

谢谢!我也制作了'bar_ids'和'bar_ids ='private - 与制作'bars'和'bars ='私有不重要,但应该注意解决方案的完整性。 –