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