首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails -在哪里放置模型助手方法

Rails -在哪里放置模型助手方法
EN

Stack Overflow用户
提问于 2017-06-07 14:34:29
回答 2查看 2.8K关注 0票数 3

由于干净的代码原因,我想将某些实现隐藏在主Model方法中。我不希望我的模型包含许多巨大的方法,只包含最清晰和详细的功能。

例如:

代码语言:javascript
复制
class SomeModel
  #included stuff
  #fields & attrs

  def modelMethod
      variable = functionality1(functionality2)
      if some condition
        functionality3
      else
        functionality4
      end
  end

我应该将我的功能方法放在同一个模型文件末尾的privateprotected部件下,还是应该将它们放入助手文件中?

如果我是对的,助手中的代码只用于视图。这是什么惯例?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-07 14:41:51

拥有privateprotected与您要做的清理类型无关。

这与继承方法的可见性/访问有关(尽管继承显然可以用于可重用性)。

方法将取决于可重用性。为什么不考虑杠杆问题呢?假设我们有SomeModel,并且希望有多个模型来实现暂停。

代码语言:javascript
复制
# app/models/some_model.rb
class SomeModel
  include Suspendable
end

然后添加您的模型关注点。

代码语言:javascript
复制
# app/models/concerns/suspendable.rb
module Suspendable
  extend ActiveSupport::Concern

  included do
    has_one :suspension
    scope :active, -> { joins('LEFT OUTER JOIN suspensions').where(suspension: {id: nil} }
  end
end

或者,如果这只适用于单个模型,但希望严格保留模型的DB操作(而不是面向业务的),那么您可以使用名称空间的关注。

代码语言:javascript
复制
# app/models/concerns/some_model/availability.rb
module SomeModel::Availability
  extend ActiveSupport::Concern

  module ClassMethods
    def availabilities_by_some_logic
    end
  end
end

http://api.rubyonrails.org/v5.0/classes/ActiveSupport/Concern.html

票数 6
EN

Stack Overflow用户

发布于 2017-06-07 14:40:50

如果您有在各种模型中使用的方法或一组方法:Rails关注

这与私有/受保护不同,您可以使用私有/受保护的方法。这就是如何提取复制。

如果您有一个模型需要的方法,并且只有模型(不是模型的子类),并且从未在类外部调用:private

如果您有一个模型及其子类需要的方法,而不是来自模型外部的方法:protected

如果您需要能够从类外部调用该方法,则两者都不能。

这个答案更详细地介绍了这些

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

https://stackoverflow.com/questions/44415618

复制
相关文章

相似问题

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