Rails でのモジュールの作成と使用の基本

ルビー・オン・レール は、構成よりも慣例を優先する、素晴らしいオープンソースのフルスタック Web アプリケーション フレームワークです。

通常アプリケーションの作成に使用される再利用可能で簡単に構成可能なコンポーネントを使用すると、Rails でのアプリケーションの構築がより迅速かつ簡単になり、その結果、生産性が向上し、ビジネスの成長がもたらされます。

柔軟でスケーラブルで、Web 開発者にとってアプリケーションの作成と保守が簡単であるため、開発者の間で注目を集めています。

ルビー・オン・レール Web アプリケーションを構築する際の作業負荷を軽減するために、既知のエンジニアリング パターンと原則を使用することに重点を置いています。

プログラミングの課題を解決する方法は複数ありますが、Ruby は一般的に使用されるパターンに依存して、Rails Web サイトの保守とアップグレードを容易にすると公言しています。

開発オーバーヘッドを削減するために、特定の問題を解決する小さな Rails コード ブロックを含むオープン ソース ライブラリが一般的に使用されます。

このようなコード ブロックを利用すると、開発者は同じ種類のコードを書くのに時間を費やすことなく、安定した十分にテストされた gem を挿入できます。 Ruby プログラマーのツールボックスの中で最も強力なツールの 1 つはモジュールです。

モジュールは、Ruby のクラス、メソッド、および定数を、個別に名前が付けられ定義された単一のユニットに収集するための構造を提供します。

これは、既存のクラス、メソッド、定数との衝突を回避したり、モジュールの機能をクラスに追加 (混合) したりするのに役立ちます。

モジュールの作成: モジュールの作成はクラスの作成と似ていますが、クラス キーワードではなくモジュール キーワードで定義を始める点が異なります。

モジュールMyFirstModule

デフsay_hello

「こんにちは」を入れる

終わり

終わり

モジュールをインスタンス化できないため、モジュールを使用するには、モジュールをクラスに含めて拡張する必要があります。

include : 指定されたモジュール メソッドをターゲット クラスのインスタンス メソッドとして混合します

extend : 指定されたモジュール メソッドをターゲット クラスのクラス メソッドとして混合します

モジュール再利用可能モジュール

デフォルトモジュールメソッド

「モジュールメソッド: こんにちは!」

終わり

終わり

クラス ClassThatincludes

再利用可能なモジュールを含める

終わり

クラス ClassThatExtends

ReusableModuleを拡張する

終わり

「含める」を入れる

ClassThatincludes.new.module_method # 「モジュール メソッド: こんにちは!」

「延長」を入れる

ClassThatExtends.module_method # 「モジュール メソッド: こんにちは!」

============================================================

Ruby のモジュールに関するその他のポイント:

1: ) メソッド ルックアップの基本を示します。

モジュールM

デフレポート

「モジュール M に「レポート」メソッド」を追加します

終わり

終わり

クラスC

Mを含む

終わり

クラスD < C

終わり

obj = D.new

オブジェクトレポート

出力:

#=> モジュール M の 'report' メソッド

ワークフロー: 私が Ruby オブジェクトで、「レポート」というメッセージが送信されたとします。私のメソッドでレポートと呼ばれるメソッドを見つけようとする必要があります

ルックアップパス。レポートが存在する場合、レポートはクラスまたはモジュール内に存在します。

私は D というクラスのインスタンスです。D はインスタンス メソッド レポートを定義しますか?

いいえ。

D はモジュールに含まれていますか?

いいえ。

D のスーパークラス C はレポート インスタンス メソッドを定義しますか?

いいえ。

C はモジュールに混在していますか?

はい:M.

M はレポート方法を定義しますか?

はい。

良い!そのメソッドを実行してみます。

2:) 同じメソッドを複数回定義する:

同じクラス内でメソッドを 2 回定義すると、2 番目の定義が最初の定義より優先されます。モジュールについても同様です。

モジュール利子ベアリング

デフォルト計算_金利

「プレースホルダー!私たちはモジュール InterestBearing にいます。」

終わり

終わり

クラス銀行口座

有利子を含む

デフォルト計算_金利

「プレースホルダー!私たちは BankAccount クラスにいます。」

「そして、calculate_interest メソッドをオーバーライドしています!」

終わり

終わり

アカウント = BankAccount.new

account.calculate_interest

出力:

#=>プレースホルダー!私たちは BankAccount クラスにいます。

#=>そして、calculate_interest メソッドをオーバーライドしています。

3:) 同じ名前のメソッドが定義された 2 つのモジュールを混在させる:

モジュールM

デフレポート

「モジュール M に「レポート」メソッド」を追加します

終わり

終わり

モジュールN

デフレポート

「'report' メソッドをモジュール N に」を配置します

終わり

終わり

クラスC

Mを含む

Nを含む

終わり

c = C.new

c.レポート

出力:

#=> モジュール N のレポート' メソッド

4:) モジュールを複数回インクルードする

クラスC

Mを含む

Nを含む

Mを含む

終わり

c = C.new

c.レポート

#=> モジュール N のレポート' メソッド

ワークフロー:

M は最後に組み込まれたモジュールであるため、report メソッドを実行すると M のバージョンが取得されると期待するかもしれません。

ただし、モジュールを再度インクルードしても何も起こりません。 M はすでに検索パス上にあるため、2 番目の include M 命令は効果がありません。 N は依然として、最後に組み込まれたモジュールとみなされます。

5:) super を使用してメソッド検索パスを上に移動する: メソッド定義の本文内で、super キーワードを使用して、メソッド検索パス内で現在使用しているメソッドの次に上位の定義にジャンプできます。実行中。

モジュールM

デフレポート

「モジュール M に「レポート」メソッド」を追加します

終わり

終わり

クラスC

Mを含む

デフレポート

「'report' メソッドをクラス C に」を追加します。

「次の上位のレポート メソッドをトリガーしようとしています…」

素晴らしい

「「スーパー」コールから戻ります。」

終わり

終わり

B

C

D

c = C.new

c.レポート

#=> クラス C の 'report' メソッド

次の上位のレポート メソッドをトリガーしようとしています…

モジュール M の 'report' メソッド 'super' 呼び出しから戻ります。

レールカーマ は、初期段階から RoR に取り組んでおり、RoR の訓練を受けた強力な従業員とともに、Ruby on Rails のエンドツーエンドのコンサルティング、アーキテクチャ、構築、管理、拡張において世界中の企業に非常に信頼される企業に成長しました。 

続きを読む : 

Ruby on Rails での TinyMCE の実装
アセット パイプライン プラグインについて
アクティブなレコードとのポリモーフィックな関連付け
Rails アプリのパフォーマンスを向上させる簡単な方法

ご連絡ください。

最新のアップデートを購読する

関連記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

jaJapanese