1. ホーム
  2. ruby-on-rails

[解決済み] ActiveRecord::Baseを拡張するRails

2022-04-25 06:25:13

質問

ActiveRecord:Baseクラスを拡張して、モデルに特別なメソッドを持たせる方法について、いくつか読みました。このクラスを拡張する簡単な方法(ステップバイステップのチュートリアル)は何ですか?

どのように解決するのですか?

いくつかのアプローチがあります。

ActiveSupport::Concernを使用する(推奨)

を読む ActiveSupport::Concern のドキュメントを参照してください。

というファイルを作成します。 active_record_extension.rb の中に lib ディレクトリを作成します。

require 'active_support/concern'

module ActiveRecordExtension

  extend ActiveSupport::Concern

  # add your instance methods here
  def foo
     "foo"
  end

  # add your static(class) methods here
  class_methods do
    #E.g: Order.top_ten        
    def top_ten
      limit(10)
    end
  end
end

# include the extension 
ActiveRecord::Base.send(:include, ActiveRecordExtension)

にファイルを作成します。 config/initializers というディレクトリを作成します。 extensions.rb を作成し、そのファイルに以下の行を追加してください。

require "active_record_extension"

継承(優先)

Tobyの 回答 .

モンキーパッチ(避けるべき)

にファイルを作成します。 config/initializers というディレクトリに active_record_monkey_patch.rb .

class ActiveRecord::Base     
  #instance method, E.g: Order.new.foo       
  def foo
   "foo"
  end

  #class method, E.g: Order.top_ten        
  def self.top_ten
    limit(10)
  end
end

正規表現に関する有名な言葉 ジェイミー・ザウィンスキー は、モンキーパッチに関連する問題を説明するために再利用することができます。

<ブロッククオート

問題に直面したとき、「そうだ、これを使おう」と考える人がいます。 モンキーパッチ 今、彼らは2つの問題を抱えています。

モンキーパッチは簡単で早い。しかし、節約した時間と労力は必ず戻ってきます。 将来的には複利で。最近は、railsコンソールで素早く解決策をプロトタイプ化するために、モンキーパッチに制限をかけています。