8

2 つの ActiveRecord モデルがあります。

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

class Bar < ActiveRecord::Base
  belongs_to :foo
end

私の設計でBarは、 を に関連付ける必要がありますが、 に関連付けられるのはデータベースの依存関係のみですFoo。これは、 のインスタンスが削除されると、関連付けられている のすべてのインスタンスも削除されるようにするためです。それとは別に、を使用するコードはについて知っているべきではなく、オブジェクトから関連付けメソッドにアクセスできるようにしたくありません。FooBarFooBarFooBarFoo

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 に答える