我正在使用Ruby on Rails 3.2.2,我想从我的模型/类中“提取”一些方法。也就是说,在多个类/模型中,我有一些方法(注意:方法与用户授权相关,并命名为“CRUD方式”),这些方法实际上是相同的;所以我认为DRY方法是将这些方法放在“共享”模块或类似的模块中。
实现这一目标的常用正确方法是什么?例如,我应该在哪里(在哪些目录和文件中)放置“共享”代码?如何在我的类/模型中包含提到的方法?你有什么建议吗?
注意:我正在寻找“Ruby on Rails创造方法”。
答案 0 :(得分: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
在模型中:
# app/models/cow.rb
class Cow < ActiveRecord::Base
include Mooable
end
为了使其以这种方式工作,您必须将以下行添加到config/application.rb
config.autoload_paths += %W(#{config.root}/app/concerns)
更多信息:
答案 1 :(得分:1)
我的回答与RoR没有任何关系,但更多与Ruby有关。
Shraing公共代码可以在Ruby中以各种方式完成。在我看来,最明显的方法是创建包含代码的Ruby模块,然后将它们包含在您的类/模型中。这些共享模块经常位于应用程序根目录的lib目录下。例如:
# lib/authorizable.rb
module Authorizable
def method1
#some logic here
end
def method2
#some more logic here
end
end
# app/models/user.rb
class User < ActiveRecord::Base
include Authorizable
end
User类现在可以调用属于Authorizable模块的method1和method2。您可以将此模块包含在您想要的任何其他Ruby类中,这样就可以干掉您的代码。