[英]Extending a rails model with concerns
我在models/extensions/url.rb
有此文件:
module Extensions
module Url
extend ActiveSupport::Concern
included do
end
module ClassMethods
def acts_as_url(attribute)
end
end
module InstanceMethods
end
end
end
然后,我可能会有一个看起来像这样的模型:
class Post
include Mongoid::Document
include Mongoid::Timestamps
include Extensions::Url
acts_as_url :title
field :title, :type => String
end
我可以在扩展模块中的哪个位置进行创建,以便每个实例都有一个名为url
的方法/访问器,以便我可以访问:title
字段(作为属性参数传递)并可以执行以下操作:
post = Post.find(params[:id])
puts post.url
只需在Url
模块内部和ClassMethods
模块外部定义url
方法。 在那里定义的任何内容都将添加为实例方法。
您可以将其放在InstanceMethods
模块中,但是Rails最近更新了ActiveSupport::Concern
,将ClassMethods
模块之外的任何内容都视为实例方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.