ここで何が起こっているのかよくわからないので、この質問をどのように表現すればよいかわかりません。
Rails 2.x のこの古い gem を見てください (Rails バージョンは重要ではありません) https://github.com/goncalosilva/subdomain_routes/blob/master/lib/subdomain_routes/routes.rb。プラグインは Rails ルーティングを拡張し、このような多くのコードを実行します
module Route
def self.included(base)
[ :add_route, :significant_keys].each { |method| base.alias_method_chain method, :subdomains }
end
def significant_keys_with_subdomains
significant_keys_without_subdomains.tap do |result|
if conditions[:subdomains].is_a? Symbol
result << conditions[:subdomains]
result.uniq!
end
end
end
...
ActionController::Routing::Route.send :include, SubdomainRoutes::Routing::Route
プラグインは、標準の Route モジュール メソッドsignificant_keys
を受け取り、それを独自の:subdomains
メソッドでチェーンします。ただし、この操作では、どういうわけか 2 つのメソッドsignificant_keys_with_subdomains
とsignificant_keys_without_subdomains
. これらのメソッドがどのように呼び出されるか、または の場合は作成されるかがわかりませんsignificant_keys_without_subdomains
。プラグイン コードでそれらを見つけることができないので、ある種のメタプログラミング マジックがレールで起こっていると考えています。
私は alias_method_chain の複雑さにあまり詳しくありませんが、これらのパターンを以前に見たことがある人は、何が起こっているのかを理解するのに役立ちますか? プラグイン自体は重要ではありません。with メソッドとwithoutメソッドがどのように発生するかを知りたいです。