web-dev-qa-db-ja.com

Ruby on Rails 3?

Ruby on Rails 3を使用しています。モジュール内のカスタムコードと共有コードを移動したいと思います。

  1. モジュールコードを記述するためにどの構文を使用する必要がありますか?
  2. アプリケーションのどのフォルダーにモジュールファイルを配置する必要がありますか?
  3. そのモジュールを1つ以上のコントローラークラスに含めるにはどうすればよいですか?
  4. アプリケーションでカスタムモジュールを使用する必要がある場合、他にどのようなアクションがありますか?
  5. アプリケーションからモジュール内のメソッドを呼び出すにはどうすればよいですか?

前もって感謝します。

90
user502052

1.モジュールを作成/開くには、次のように言うだけです。

module MyModule
  def first_module_method
  end
end

宛先2. libフォルダー。モジュールをlibフォルダーに整理する場合は、モジュール自体にモジュールを配置できます。たとえば、サブフォルダーsuper_modulesモジュールは次のように定義されます。

module SuperModules
  module MyModule
    def first_module_method
    end
  end
end

3./5へ。モジュールをクラスに含める場合、クラス内で定義されているかのようにモジュールのメソッドを単純に呼び出すことができます。

class MyClass
  include MyModule
  def some_method
    first_module_method #calls module method
  end
end

4.最初に、アプリケーションのすべてのクラスでモジュールが本当に必要であることを確認します。そうでない場合は、どうしても必要のないクラスを肥大化させないように、必要な場所にのみ含めるのが理にかなっています。本当にどこでもモジュールが必要な場合は、アプリ内のクラスのクラス階層を見てください。すべてのモデルにモジュールが必要ですか? ActiveRecord :: Baseを開き、そこにモジュールを追加できます。

114
Stephan

A> 1。他のRubyクラスと同じ構文を使用できます。たとえば、classify_vehicleメソッドを使用して、車輪の数に基づいて車両を分類するVehicleClassiferモジュールを定義しています入力として受け取ります。

module VehicleClassifer
  def classify_vehicle(number_of_wheels)
    VehicleType.where("number_of_wheels = ?", number_of_wheels)
  end
end

A> 2。モジュールは通常/ libフォルダーに保存されます。

質問3、4、5はほぼ同じ答えを持っています。使用できます

class SomeController < ApplicationController
  include VehicleClassfier

  def index 
    classify_vehicle(4)  
  end
end

クラスでは、モジュールを使用しており、モジュールのすべてのメソッドにアクセスできます。

また、アプリ全体でモジュールを使用する必要がある場合は、アプリケーションコントローラーに含めることができます。

3
Shreyas