0

我有这个文件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
4

1 回答 1

0

只需在模块内部和模块外部定义您的url方法。在那里定义的任何东西都将作为实例方法添加。UrlClassMethods

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

于 2012-05-14T18:42:01.813 回答