2

モデルには非常に大きな機能があり、モデルをドライに保つために別の場所に保存したいと思います。ApplicationHelperにメソッドを保存してから、モデルからメソッドを呼び出すのは悪い考えだと読みました。では、良い考えは何ですか?大きなメソッドを含む別のファイルを作成し、モデルからそれらを呼び出したいと思います。

4

2 に答える 2

2

「プレーン オールド ルビー オブジェクト (PORO)」を作成して、作業を行うことができます。ユーザーの延滞額を計算するメソッドがあるとします。

したがって、 app/services/calculates_overages.rb を作成できます

class CalculatesOverages
  def initialize(user)
    @user = user
  end

  def calculate
    # your method goes here
  end
end

次に、次のことができます。

class User < ActiveRecord::Base
  def overage_amount
    CaluclatesOverage.new(self).calculate
  end
end

または、コントローラーで次のことができます。

def show
  @amount = CaluclatesOverage.new(current_user).calculate
end

app/services ディレクトリは、app/models または lib ディレクトリにすることもできます。これには(まだ)定められた規則はありません。

于 2013-01-11T22:20:09.027 に答える
0

懸念事項を使用します。https://gist.github.com/1014971

簡単だ。次のようapp/models/concernsにファイルを作成します。your_functionality.rb

module YourFunctionality
  extend ActiveSupport::Concern

  def your_fat_method
    # insert...
  end
end

そしてあなたのモデルでは単純に:

include YourFunctionality
于 2013-01-11T22:58:50.253 に答える