HippoBlog
Web開発に関する備忘録や
日々の雑記ブログ
  • #Ruby on Rails
  • 2019年8月19日
ENTRY TITLE

[rails] concern/moduleの使い方

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

はじめ勘違いしてたのでメモ。

  • includeしたモジュールを全く別のクラスのような扱いで使っていたが間違い
  • インクルードしたクラスに機能追加(def)されるイメージ

[concern/import.rb]

require 'active_support/concern'

module Import
    extend ActiveSupport::Concern

    # Scope や Callback 処理を実装する
    included do
        scope :without_deleted, lambda{ where(deleted_at: nil) }
    end

    # インクルード先にメソッド(クラスメソッド)追加
    class_methods do
        def hoge
            raise
        end
    end

    # インスタンスメソッド
    def fuga
        raise
    end
end

以下が間違い

[model/hoge.rb]

class Hoge < ApplicationRecord
    include Import

    Hoge.hoge
    Import.fuga
end

以下が正しい

[model/hoge.rb]

class Hoge < ApplicationRecord
    include Import

    foo = self.new
    foo.fuga
    Hoge.hoge
end

参考


最後までお読みいただき、ありがとうございました。

もし、この記事が役に立ちましたら、ぜひ「いいね!」 をよろしくお願いいたします。

ご意見などありましたら@hippohackへお願いいたします。

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