首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ruby on Rails,从模型中调用一个非常大的方法

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

Stack Overflow用户
提问于 2013-01-12 06:15:02
回答 2查看 107关注 0票数 2

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-12 06:58:50

使用关注点。https://gist.github.com/1014971

这很简单。在app/models/concerns中创建文件your_functionality.rb,如下所示:

代码语言:javascript
运行
复制
module YourFunctionality
  extend ActiveSupport::Concern

  def your_fat_method
    # insert...
  end
end

在你的模型中,简单地:

代码语言:javascript
运行
复制
include YourFunctionality
票数 0
EN

Stack Overflow用户

发布于 2013-01-12 06:20:09

你可以创建一个“普通的旧ruby对象(PORO)”来为你做你的工作。假设您有一个计算用户逾期金额的方法。

因此,您可以创建app/services/calculates_overages.rb

代码语言:javascript
运行
复制
class CalculatesOverages
  def initialize(user)
    @user = user
  end

  def calculate
    # your method goes here
  end
end

然后,您可以:

代码语言:javascript
运行
复制
class User < ActiveRecord::Base
  def overage_amount
    CaluclatesOverage.new(self).calculate
  end
end

或者,在控制器中,您可以:

代码语言:javascript
运行
复制
def show
  @amount = CaluclatesOverage.new(current_user).calculate
end

app/services目录也可以是app/model或lib目录。这方面(目前)还没有固定的约定。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14287553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档