Ruby on rails 如何映射命名空间模型?

Ruby on rails 如何映射命名空间模型?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我做到了: rails g model User rails g model User/Deal 让它工作起来 # model/user.rb module User def self.table_name_prefix 'user_' end class User < ActiveRecord::Base self.table_name = 'users' end end # model/user/deal.rb class User::Deal &l

我做到了:

rails g model User
rails g model User/Deal
让它工作起来

# model/user.rb
module User
  def self.table_name_prefix
    'user_'
  end
  class User < ActiveRecord::Base
    self.table_name = 'users'
  end
end

# model/user/deal.rb
class User::Deal < ActiveRecord::Base
end
#model/user.rb
模块用户
def self.table_name_前缀
‘用户’
结束
类用户
我该怎么办

使用

User.create(名称:“jason”)

反而

User::User.create(名称:“jason”)


始终使用
User::User
太复杂了。

您创建
模块User
是有目的的(我想)。也许你的任务需要这样的“复杂化”? 如果在某些代码段中,您希望将
User::User
替换为
User

module User
  class AnotherUser
    def create
      User.create(name: 'jason')
    end
  end
end
注意:
class-AnotherUser
位于
User
命名空间下!要从外部模块调用,您需要使用
User::AnotherUser

只需执行以下操作:

#app/models/user.rb
class User < ActiveRecord::Base
   has_many :deals, class_name: "User::Deal"
end

#app/models/user/deal.rb
class User::Deal < ActiveRecord::Base
  belongs_to :user
end
这不是你想要的答案,所以如果你愿意,我会删除。我真的认为你把模块等的事情复杂化了


更新

根据,嵌套模型将自动查找
模块\u类
表名:

嵌套类的表名以父表名的单数形式作为前缀。不考虑封闭模块

然而,这些例子确实让我感到困惑

如果不起作用,您可以在类上使用
self.table_prefix

#app/models/user/deal.rb
class User::Deal < ActiveRecord::Base
   def self.table_name_prefix
      "user_"
   end
end
#app/models/user/deal.rb
类用户::交易
噢。是的,这才是我真正需要的。但是如果我这样做了,那么
table\u name\u prefix
呢?我是否应该将
self.table\u name='user\u deals'
添加到
user::Deal
以修复table\u name?如果您只想为
用户保留
deals
表(我们没有,这就是我最初没有包含它的原因),那么您需要使用
table\u name\u前缀
;如果你需要帮助,我可以在答案中加上这个,谢谢。
file                  class               table_name
invoice.rb            Invoice::Lineitem   invoice_lineitems
#app/models/user/deal.rb
class User::Deal < ActiveRecord::Base
   def self.table_name_prefix
      "user_"
   end
end