延长轨道模型的顾虑

时间:2012-05-14 18:33:08

标签: ruby-on-rails ruby model

我在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

1 个答案:

答案 0 :(得分:0)

只需在url模块内以及Url模块之外定义ClassMethods方法即可。那里定义的任何内容都将作为实例方法添加。

您可以将它放在InstanceMethods模块中,但Rails最近更新ActiveSupport::Concern以将ClassMethods模块之外的任何内容视为实例方法。