Mat*_*Som 2 model ruby-on-rails helper
由于干净的代码原因,我想对主要的 Model 方法隐藏某些实现。我不希望我的模型包含很多庞大的方法,只包含最清晰和冗长的功能。
例如:
class SomeModel
#included stuff
#fields & attrs
def modelMethod
variable = functionality1(functionality2)
if some condition
functionality3
else
functionality4
end
end
Run Code Online (Sandbox Code Playgroud)
我应该将我的功能方法放在同一模型文件末尾的aprivate或protectedpart下,还是应该将它们放入帮助文件中?
如果我是对的,助手中的代码仅用于视图。这是什么约定?
有private或protected没有任何与清理你正在试图做的类型。
这与继承方法的可见性/访问有关(尽管继承显然可以用于可重用性)。
方法将取决于可重用性。为什么不利用顾虑?假设我们有SomeModel并想要多个模型来实现暂停。
# app/models/some_model.rb
class SomeModel
include Suspendable
end
Run Code Online (Sandbox Code Playgroud)
然后添加您的模型关注点。
# 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
Run Code Online (Sandbox Code Playgroud)
或者,如果这真的只适用于单个模型,但希望保持模型严格的 DB 操作(不是面向业务的),那么您可能会有命名空间问题。
# app/models/concerns/some_model/availability.rb
module SomeModel::Availability
extend ActiveSupport::Concern
module ClassMethods
def availabilities_by_some_logic
end
end
end
Run Code Online (Sandbox Code Playgroud)
http://api.rubyonrails.org/v5.0/classes/ActiveSupport/Concern.html