【Rails】クラスファイルを用意してcontrollerから呼び出したい

  • このエントリーをはてなブックマークに追加

Railsのcontroller.rbから自前で作成したクラスファイルを呼び出したい場合の方法です。

controllerやApplicationControllerクラスに定義したくない事情がある場合はこの方法を活用してみてください。
当環境はRails5.2です。

クラスファイルの作り方

フォルダ構成

Railsでのクラスファイルは、「app」フォルダ直下にフォルダを切って管理するといいでしょう。

「app/commonclass/hoge.rb」のような構成で作ったクラスファイルを管理します。

ここから先、「commonclass」フォルダの配下にクラスファイルを管理したとして説明を進めていきます。

 

クラスファイルの新規作成

「commonclass」フォルダ直下に「hoge.rb」ファイルを新規作成します。(名前はなんでも可)

ファイルを開き中身を以下のように記述します。

 

「class ファイル名(大文字始まり)」となるように記述します。

これでひとまずクラスファイルの作成は完了で、次にクラスの処理を追加していきます。

 

例として超簡単な、文字列に「world」をくっつけて返すだけのメソッド「syori」を用意しました。

外部からメソッドを呼び出す場合は「private」をつけず、そのまま宣言します。

逆に、外部から呼び出したくない場合は「private」をつけます。

 

controllerから作ったクラスを呼び出す

controller側の対応です。

まず、controller内に呼び出したいクラスを読み込ませる必要があります。

 

「require ‘./app/パス’」と記述することでクラスを読み込ませることができます。

クラス名の部分では拡張子「.rb」は不要です。

 

クラスを呼び出す準備が整ったので、実際にクラスを使ってみます。

以下のように記述することでクラスのメソッドを呼び出せます。

 

「hoge = Hoge.new」でhogeクラスのメソッド、変数を扱えるようになります。

モデルクラスを扱う場合のやり方と一緒です。

「hoge.syori()」でhogeクラスのsyoriメソッドを呼び出しています。こちらの結果は「HelloWorld」と出力されます。

 

変数とinitialize

余談ですが、Rubyのクラスはinitializeメソッドを使う事でクラスのインスタンス変数を初期化することができます。

 

「initialize」メソッドがある場合、newされた瞬間に呼び出され処理されます

これを利用して、インスタンス変数をnewされたと同時に初期化することができます。

ちなみに、上のように「initialize」メソッドは引数を設定することもできます。

その場合、「Hoge.new(引数)」のような形でnewを行うときに引数も設定してあげます。

 

まとめ

事情があって自前のクラスファイルを読み込ませたい場合の方法でした。

外部から取得したクラスをプロジェクトに導入したいといった場合にも活用できます。

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*