【问题标题】:classes with same names具有相同名称的类
【发布时间】:2011-11-20 21:03:46
【问题描述】:

我有一个用户模型:

class User < ActiveRecord::Base

end

此模型用于存储所有企业用户

然后我想在我的工作空间命名空间中有另一个用户模型:

class Workplace::User < ActiveRecord::Base

end

这个类将用于我的用户在他们工作场所的用户

当我要迁移时它不起作用并出现以下错误消息:

Expected .../app/models/workplace/user.rb to define User

我对使用不同名称的模型没有这个问题,但我想使用相同的名称(对我来说更有意义...)

我怎么可能?谢谢!!!

【问题讨论】:

  • 就个人而言,我认为这是一个坏主意,因为您现在必须在代码中跟踪您正在处理的用户类型。对我来说,听起来你有应用程序用户和工作场所用户。为什么不只有 AppUser 和 User?还是使用相同的模型,使用适当的关联,然后消除差异?
  • 我不能使用同一个模型,因为我有一个多对多的关系。 User 是“公司目录”,而 Workplace::User 是在工作场所工作的用户的个人目录。另一种方法是将类排除在模型之外并创建一个 WorkplaceUser(或任何其他名称)类,但我尝试了这种方式,因为路由似乎更干净。我现在有workplace_users_path 而不是workplace_workplace_users_path。但我对 Rails 很陌生,我仍在寻找自己的方式。我愿意接受任何建议...
  • 为什么不使用单表继承?一切都会干净得多

标签: ruby-on-rails model namespaces


【解决方案1】:

当您在命名空间中声明类时,rails 期望 MVC 的文件放置在与命名空间同名的文件夹中。

试着把它们放在

app/models/workplace/user.rb

app/controllers/workplace/user_controller.rb

应用程序/视图/工作场所/

【讨论】:

  • 是这样的。这是由脚手架生成器自动完成的
  • 嗯,奇怪,我试过这样做,我没有问题,你说它在 rake db:migrate 中失败了?您在 routes.rb 中有正确的条目吗?你能添加你尝试过的生成器命令吗?
  • 我所做的是将我的另一个 user.rb 类放在另一个命名空间文件夹中(model/admin 而不是 model/),现在 Workplace::User 可以工作了。奇怪的行为。顺便说一句,谢谢你让我朝着正确的方向前进。
  • @ndemoreau 你确定是这个问题吗?我觉得stackoverflow.com/questions/13236083/…的可能性更大
猜你喜欢
  • 2015-07-23
  • 2011-09-16
  • 2020-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-01
相关资源
最近更新 更多