2013-08-19 20 views
0

我在想如何在模型中拥有各种属性。例如:如何使你自己的属性,例如。 “devise:authenticable”在ruby/rails中

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

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

​​
+0

您需要创建一个自定义模块。 The:lockable [module](https://assets1.assembla.com/code/donodon/git/nodes/v0.1/vendor/gems/devise-1.0.7/lib/devise/models/lockable.rb?type = tag)被定义为[here](https://assets1.assembla.com/code/donodon/git/nodes/v0.1/vendor/gems/devise-1.0.7/lib/devise/models/lockable.rb ?类型=标记)。 –

回答

0

关于开源的东西的很大一部分是你可以看看,找出答案。我已经删除了一些不相关的线(宝石/设计-2.2.3/lib目录/色器件/ 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远远不如cutsey助手方法。

相关问题