如何创建命名空间模型?

时间:2015-11-09 16:15:28

标签: ruby-on-rails ruby activerecord

我想创建名称空间模型,如:

rails g model aaa
rails g model aaa/bbb
rails g model aaa/ccc

当我运行rails g model aaa/bbb时,Rails会自动生成:

module AAA
  def self.table_name_prefix
    'aaa_'
  end
end

AAA也是一个模型,所以我需要把它放在模块中:

Module AAA
  def self.table_name_prefix
    'staff_'
  end

  class AAA < ActiveRecord::Base
  end
end

但这不起作用。当我运行AAA.new时,Rails说:

NoMethodError: undefined method `new' for AAA:Module

如何实例化此模型?

2 个答案:

答案 0 :(得分:0)

您只能在new es上呼叫class,并且您已在AAA::AAA模块中嵌套了AAA课程。您需要调用AAA::AAA.new或不在模块中包装该类。即使您使AAA成为顶级类而不是模块,您仍然可以在其中嵌套AAA::BBB。这看起来像这样:

class AAA < ActiveRecord::Base
  class BBB < ActiveRecord::Base
  end
end

然后,您可以同时拨打AAA.newAAA::BBB.new

答案 1 :(得分:0)

我们总是像这样做名称空间:

#app/models/aaa/model.rb
class Aaa::Model < ActiveRecord::Base
   def new
   end
end

这将允许您致电:

Aaa::Model.new

如果您使用的是模块,则可能需要使用以下内容:http://www.benfranklinlabs.com/where-to-put-rails-modules/

#app/lib/aaa.rb
module Aaa
   def self.table_name_prefix
      'aaa_'
   end
end

#app/models/aaa/aaa.rb
class Aaa::Aaa < ActiveRecord::Base
   def new
   end
end

您仍然需要致电Aaa::Aaa.new