铁路私人协会

Ida*_*rye 7 ruby activerecord ruby-on-rails associations

我有两个ActiveRecord模型:

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

class Bar < ActiveRecord::Base
  belongs_to :foo
end
Run Code Online (Sandbox Code Playgroud)

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

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

有没有办法使关联私有,或实现数据库依赖而不创建Bar关联Foo

And*_*all 13

您必须调用放置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>>
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!我还将 `bar_ids` 和 `bar_ids=` 设为私有 - 不像将 `bars` 和 `bars=` 设为私有那么重要,但应该注意解决方案的完整性。 (2认同)