我读过一些关于如何扩展ActiveRecord:基类的文章,这样我的模型就会有一些特殊的方法。扩展它的简单方法是什么(逐步教程)?
发布于 2010-02-25 07:40:48
您可以简单地扩展类并简单地使用继承。
class AbstractModel < ActiveRecord::Base
self.abstract_class = true
end
class Foo < AbstractModel
end
class Bar < AbstractModel
end
发布于 2012-02-09 03:36:52
您也可以使用ActiveSupport::Concern
,更像是Rails的核心习惯用法:
module MyExtension
extend ActiveSupport::Concern
def foo
end
module ClassMethods
def bar
end
end
end
ActiveRecord::Base.send(:include, MyExtension)
根据@daniel的评论进行编辑
然后,您的所有模型都将包含方法foo
作为实例方法,并将ClassMethods
中的方法包含为类方法。例如,在FooBar < ActiveRecord::Base
上,您将拥有:FooBar.bar
和FooBar#foo
http://api.rubyonrails.org/classes/ActiveSupport/Concern.html
发布于 2017-01-25 00:03:43
Rails5提供了一个扩展ActiveRecord::Base
的内置机制。
这是通过提供额外的层来实现的:
# app/models/application_record.rb
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
# put your extensions here
end
所有的模型都是从这个模型继承过来的:
class Post < ApplicationRecord
end
例如,参见this blogpost。
https://stackoverflow.com/questions/2328984
复制相似问题