私はPythonを使用してきましたが、RubyonRailsの「魔法」がどのように機能するかについて非常に混乱しています。
1.どこにもrequireステートメントはありません
Pythonでは、どこからでも関数にアクセスするには、インポートする必要があります。ベースルビーも同じだと思います。しかし、レールを使用する場合、ページの上部にrequireステートメントがなくても、他のモジュールで定義されている非表示の変数と関数を呼び出すことができます。
たとえば、私はそのようなファイルを持つことができます:
class CartsController < ApplicationController
....
def show
begin
@cart = Cart.find(params[:id])
rescue ActiveRecord::RecordNotFound
logger.error "Attempt to access invalid cart #{params[:id]}"
redirect_to store_url, notice: 'Invalid cart'
end
end
ロガー、リダイレクトなどがすべて定義されていない場合。それは単にApplicationControllerから複雑なツリーを継承するのでしょうか、それとも他のメカニズムを介してそれらの名前空間にアクセスするのでしょうか。
2.存在しないメソッドを使用する
これは有効なRailsコードです
current_item = line_items.find_by_product_id(product_id)
find_by_products_idがどこにも定義されていない場合でも、Railsはその場でメソッドを動的に「作成」します。これがどのように行われるかについての技術的な洞察はありますか?
ご協力いただきありがとうございます!