Ruby on rails Rails模型命名空间:找不到表

Ruby on rails Rails模型命名空间:找不到表,ruby-on-rails,ruby,database,model,namespaces,Ruby On Rails,Ruby,Database,Model,Namespaces,这不是“如何在Rails中显式指定模型的表名映射?”的重复,因为我正在寻找一种不显式设置表名的方法。相反,我希望根据模型的继承自动设置表名。 我得到了以下模型结构: models First (inheritance) Second (inheritance) Third (model) User (model) Second (model) 我在数据库中有以下表格: first_second_thirds users user_seconds 当我执行以

这不是“如何在Rails中显式指定模型的表名映射?”的重复,因为我正在寻找一种不显式设置表名的方法。相反,我希望根据模型的继承自动设置表名。

我得到了以下模型结构:

models
  First (inheritance)
    Second (inheritance)
      Third (model)
  User (model)
    Second (model)
我在数据库中有以下表格:

first_second_thirds
users
user_seconds
当我执行以下代码时:

First::Second::Third.create(id: 1)
User.create(id: 1)
User::Second.create(id: 1)
我得到了这个错误:

ActiveRecord::StatementInvalid:找不到表'Trithers'

如何告诉模型相应的数据库表

编辑:添加代码示例

db/migrate/2017030520503\u创建第一个\u第二个\u第三个.rb

class CreateFirstSecond
db/migrate/2016114164114_designe_create_users.rb

class DevisionCreateUsers
db/migrate/20170305145804_创建_用户_故事.rb

class CreateUserSeconds
app/models/first/second/third.rb

class用户
app/models/user.rb

class用户
app/models/user/second.rb

class用户
这些都使用继承还是模块?实际的代码可能会有帮助。@Anthony我在文章中添加了一些细节。如果你还需要一些示例代码,我也可以添加。你好-是的,请给我们看一些真实的代码片段-很难调试对代码的口头描述:)@TarynEast Ok,为了更好地理解,我添加了一些示例代码。如果您查看收到的错误消息:
ActiveRecord::StatementInvalid:找不到表'Trithers'
rails希望您通过类名本身调用该表,即
Trithers
-rails不会自动检测模块嵌套的命名空间(即第一个::第二个::第三个
)。注意:这里的命名约定不是继承,而是模块名称。如果要将模块嵌套作为数据库表名称的一部分添加,则需要在模块中使用显式表名称或使用
table\u name\u前缀
。这些都使用继承还是模块?实际代码可能会有所帮助。@Anthon我在帖子中添加了一些细节。如果你还需要一些示例代码,我也可以添加。你好-是的,请给我们看一些真实的代码片段-很难调试对代码的口头描述:)@TarynEast Ok,为了更好地理解,我添加了一些示例代码。如果您查看收到的错误消息:
ActiveRecord::StatementInvalid:找不到表'Trithers'
rails希望您通过类名本身调用该表,即
Trithers
-rails不会自动检测模块嵌套的命名空间(即
First::Second::Third
)。注意:这里的命名约定不是继承,而是模块名称。如果要将模块嵌套添加为数据库表名称的一部分,则需要在模块中使用显式表名称或使用
表名称前缀。
class CreateFirstSecondThirds < ActiveRecord::Migration[5.0]
  def change
    create_table :first_second_thirds do |t|

      t.timestamps
    end
  end
end
class DeviseCreateUsers < ActiveRecord::Migration[5.0]
  def change
    create_table :users do |t|

      t.timestamps
    end
  end
end
class CreateUserSeconds < ActiveRecord::Migration[5.0]
  def change
    create_table :user_seconds do |t|

      t.timestamps
    end
  end
end
class User < ApplicationRecord
end
class User < ApplicationRecord
end
class User < ApplicationRecord
end