モデル内の親モジュールからのメソッドの挿入/アクセス

Railsで私は以下の構造を持っています

#.../models/A.rb
module A
  def m
  end
end

#.../models/a/B.rb
class A::B < ActiveRecord::Base
end

This automatically places A as a parent of B. Is there a way to do something like B.m without modifying B? I know that I could do something like B.parent.m and from there create aliases, but then i would have to change B.
I'm looking to somehow inject a code present in A into B, but I don't know where this automatic association is done behind the scenes. Something like

module A
  module C
    def mc
    end
  end
  def placed_as_parent (child) # supposing this is the method called to put this module as a parent 
    super child
    child.include(C) #this is what I would like to do
  end
end

その背後にある疑問は、私はすでにそのフォルダのいくつかのモデルの間で共有されているモジュールを持っていると私はそこにモデルのいくつかの共通のものを入れたいと思いません手動で/

[[EDITED]]

私は私の質問で明確ではない。レール3の場合

rails generate active_record:model A::B

ファイルを生成します

#.../models/A.rb
module A
  def self.table_name_prefix
    'a_'
  end
end

#.../models/a/B.rb
class A::B < ActiveRecord::Base
end

だから私がコンソールを開いて、

A::B.table_name # -> 'a_b'
A::B.table_name_prefix # -> ''
A::B.parent # -> A
A.table_name_prefix # 'a_'

これは自動的にモデルBに包含/拡張なしで自動的に発生します。私が望むのは、前に説明したようにB上のものを変更することなく、Aにもっと多くのものを入れ、Bからアクセスすることです。

0
それを明確にしてくれてありがとう。さて、あなたが望むのがRuby言語で可能であることを知っています。 ActiveRecordのソースコードを読むことができます。
追加された 著者 David Grayson,
確かに、私が望んでいたことは可能です!私が望むのは、どのように/それを行うための最良の方法があるかを知ることです
追加された 著者 Guy,

2 答え

OPは書いた:

その背後にある疑問は、私は既にそのフォルダのいくつかのモデルの間で共有されているモジュールを持っていると私はそこにモデルのいくつかの共通のものを入れたいと思います私のモデル

私がやることは次のとおりです:

module Stuff1
   ...
end

module Stuff2
   ...
end

module StuffIWantInSeveralModels
   include Stuff1, Stuff2
end

class X < ActiveRecord::Base
    include StuffIWantInSeveralModels
end

class Y < ActiveRecord::Base
    include StuffIWantInSeveralModels
end

次に、いくつかのモデルに新しいモジュールを追加する場合は、「include」ステートメントを1つの場所(StuffIWantInSeveralModelsモジュール内)に書くだけです。

各モジュールはlibディレクトリ内の独自のファイルにあり、Railsの自動読み込みが機能するようにファイル名がモジュールの名前と一致する必要があります(例:stuff_i_want_in_several_models.rb)。

これはあなたが望むものを達成するのですか?

0
追加された
はい、それは私が望む(私は私のアプリでこれを使用しています)を実現しますが、私はレールの自動モデルリンクを使用してそれを行う新しい方法を探しています。
追加された 著者 Guy,

正直言って、私はあなたの質問を完全に理解しているかどうかはわかりませんが、とにかくそれを撃つでしょう。

Moduleクラスには、モジュールが含まれるクラスへの参照を取得するためのフックがあります。したがって、あなたはそれで事実上何でもすることができます。

例:

module A  
  # you can change the class' behavior here
  def self.included(klass) 
    puts "included in #{klass}" 
  end
end

そして、それを使用する:

class B
  include A #this causes the included hook in the module to be called
end

これはあなたの後のことですか?

0
追加された
私はこのアプローチを知っていますが、Bの中に 'include A'と書かなければならないので、私が探しているものではありません
追加された 著者 Guy,