Railsのcontroller.rbから自前で作成したクラスファイルを呼び出したい場合の方法です。
クラスファイルの作り方
フォルダ構成
Railsでのクラスファイルは、「app」フォルダ直下にフォルダを切って管理するといいでしょう。
「app/commonclass/hoge.rb」のような構成で作ったクラスファイルを管理します。
ここから先、「commonclass」フォルダの配下にクラスファイルを管理したとして説明を進めていきます。
クラスファイルの新規作成
「commonclass」フォルダ直下に「hoge.rb」ファイルを新規作成します。(名前はなんでも可)
ファイルを開き中身を以下のように記述します。
1 2 3 |
class Hoge end |
「class ファイル名(大文字始まり)」となるように記述します。
これでひとまずクラスファイルの作成は完了で、次にクラスの処理を追加していきます。
1 2 3 4 5 6 7 8 9 |
class Hoge # 文字列に「world」をくっつける処理 def syori(val) result = val + "world" return result end end |
例として超簡単な、文字列に「world」をくっつけて返すだけのメソッド「syori」を用意しました。
外部からメソッドを呼び出す場合は「private」をつけず、そのまま宣言します。
逆に、外部から呼び出したくない場合は「private」をつけます。
controllerから作ったクラスを呼び出す
controller側の対応です。
まず、controller内に呼び出したいクラスを読み込ませる必要があります。
1 2 3 4 5 6 7 8 9 10 |
class HogeController < ApplicationController # クラスを読み込ませる require './app/commonclass/hoge' def index end end |
「require ‘./app/パス’」と記述することでクラスを読み込ませることができます。
クラス名の部分では拡張子「.rb」は不要です。
クラスを呼び出す準備が整ったので、実際にクラスを使ってみます。
以下のように記述することでクラスのメソッドを呼び出せます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class HogeController < ApplicationController # クラスを読み込ませる require './app/commonclass/hoge' def index # hogeクラスのsyoriメソッドを呼び出す hoge = Hoge.new str = hoge.syori("Hello") p str end end |
「hoge = Hoge.new」でhogeクラスのメソッド、変数を扱えるようになります。
モデルクラスを扱う場合のやり方と一緒です。
「hoge.syori()」でhogeクラスのsyoriメソッドを呼び出しています。こちらの結果は「HelloWorld」と出力されます。
変数とinitialize
余談ですが、Rubyのクラスはinitializeメソッドを使う事でクラスのインスタンス変数を初期化することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
class Hoge @text = "" # newされた時呼び出されるメソッド(引数も設定出来る) def initialize(text) @text = text end def get_text return @text end end # ////////////////////////////// class HogeController def index hoge = Hoge.new("あいうえお") p hoge.get_text # 結果は「あいうえお」と出力される end end |
「initialize」メソッドがある場合、newされた瞬間に呼び出され処理されます。
これを利用して、インスタンス変数をnewされたと同時に初期化することができます。
ちなみに、上のように「initialize」メソッドは引数を設定することもできます。
その場合、「Hoge.new(引数)」のような形でnewを行うときに引数も設定してあげます。
まとめ
事情があって自前のクラスファイルを読み込ませたい場合の方法でした。
外部から取得したクラスをプロジェクトに導入したいといった場合にも活用できます。