Ruby on Rails,从模型中调用一个非常大的方法

时间:2013-01-11 22:15:02

标签: ruby-on-rails

我的模型中有一个非常大的功能,我想将它存储在其他地方,以保持我的模型干燥。我读到在ApplicationHelper中存储方法然后从模型中调用它们是一个坏主意。那么什么是好主意呢? 我希望用我的大方法创建一个单独的文件,然后从模型中调用它们。

2 个答案:

答案 0 :(得分:2)

您可以创建一个“普通老红宝石对象(PO​​RO)”来为您完成工作。假设你有一个计算用户逾期金额的方法。

因此,您可以创建app / services / calculate_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目录。这个(还)没有固定的约定。

答案 1 :(得分: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