如何重构"共享"方法?

use*_*882 5 ruby methods refactoring ruby-on-rails ruby-on-rails-3

我正在使用Ruby on Rails 3.2.2,我想从我的模型/类中"提取"一些方法.也就是说,在多个类/模型中,我有一些方法(注意:方法与用户授权有关,并被命名为" CRUD方式"),它们的工作方式基本相同; 所以我认为DRY方法是将这些方法放在"共享"模块或类似的东西中.

实现这一目标的常见和正确方法是什么?例如,我应该在哪里(在哪些目录和文件中)放置"共享"代码?如何在我的类/模型中包含提到的方法?你有什么建议吗?

注意:我正在寻找"Ruby on Rails方法来制造东西".

Tim*_*nta 8

一种流行的方法是使用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)

更多信息: