我想创建名称空间模型,如:
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
如何实例化此模型?
答案 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.new
和AAA::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