繁体   English   中英

扩展关注的Rails模型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM