0

我想知道如何在我的模型中拥有各种属性。例如:

Property < ActiveRecord::Base
   locatable, saleable ...

这些会是mixin吗?还是有另一种实现方式?例如。设计的方式有:

  class User < ActiveRecord::Base
    # Include default devise modules. Others available are:
    # :token_authenticatable, :confirmable,
    # :lockable, :timeoutable and :omniauthable
    devise :database_authenticatable, :registerable,
           :recoverable, :rememberable, :trackable, :validatable
  end
4

1 回答 1

0

关于开源东西的重要部分是你可以看看并找出答案。我删除了一些不相关的行(gems/devise-2.2.3/lib/devise/models.rb:83):

def devise(*modules)

  devise_modules_hook! do
    include Devise::Models::Authenticatable
    selected_modules.each do |m|
      mod = Devise::Models.const_get(m.to_s.classify)

      if mod.const_defined?("ClassMethods")
        class_mod = mod.const_get("ClassMethods")
        extend class_mod

        if class_mod.respond_to?(:available_configs)
          available_configs = class_mod.available_configs
          available_configs.each do |config|
            next unless options.key?(config)
            send(:"#{config}=", options.delete(config))
          end
        end
      end

      include mod
    end
  end
end

所有设计都在做(除了做家务)是自动循环遍历你传入的符号数组,并将它们(或有时使用extend)包含到你的类中Devise::Models::#{property_name}

你绝对可以这样做。应不应该取决于你在做什么。通常,仅仅看到include SomeModule::SomeClass比简单的辅助方法提供的信息要多得多。

于 2013-08-19T21:55:46.757 回答