use*_*882 5 ruby methods refactoring ruby-on-rails ruby-on-rails-3
我正在使用Ruby on Rails 3.2.2,我想从我的模型/类中"提取"一些方法.也就是说,在多个类/模型中,我有一些方法(注意:方法与用户授权有关,并被命名为" CRUD方式"),它们的工作方式基本相同; 所以我认为DRY方法是将这些方法放在"共享"模块或类似的东西中.
实现这一目标的常见和正确方法是什么?例如,我应该在哪里(在哪些目录和文件中)放置"共享"代码?如何在我的类/模型中包含提到的方法?你有什么建议吗?
注意:我正在寻找"Ruby on Rails方法来制造东西".
一种流行的方法是使用ActiveSupport问题.然后,您可以将公共逻辑放在app/concerns/或app/models/concerns/目录下(根据您的偏好).一个说明性示例:
# app/concerns/mooable.rb
module Mooable
extend ActiveSupport::Concern
included do
before_create :say_moo
self.mooables
where(can_moo: true)
end
end
private
def say_moo
puts "Moo!"
end
end
Run Code Online (Sandbox Code Playgroud)
在模型中:
# app/models/cow.rb
class Cow < ActiveRecord::Base
include Mooable
end
Run Code Online (Sandbox Code Playgroud)
为了使其以这种方式工作,您必须添加以下行 config/application.rb
config.autoload_paths += %W(#{config.root}/app/concerns)
Run Code Online (Sandbox Code Playgroud)
更多信息: