重命名现有的Rails模型并添加名称空间

马丁·韦尔德霍

原始代码如下所示:

# app/models/sso_configuration.rb
class SsoConfiguration < ActiveRecord::Base
end

# db/schema.rb
create_table "sso_configurations", force: true do |t|
  ...
end

我必须重命名模型并添加名称空间,以便拥有Sso::SamlConfiguration我更改了模型和数据库表。

# db/migrate20160225144615_rename_sso_configurations_to_sso_saml_configurations.rb
class RenameSsoConfigurationsToSsoSamlConfigurations < ActiveRecord::Migration
  def change
    rename_table :sso_configurations, :sso_saml_configurations
  end
end

# db/schema.rb
create_table "sso_saml_configurations", force: true do |t|
  ...
end

# app/models/sso/saml_configuration.rb
module Sso
  class SamlConfiguration < ActiveRecord::Base
  end
end

当我打开Rails控制台时,会发生以下情况。

> Sso::SamlConfiguration
=> Sso::SamlConfiguration(Table doesn't exist)
> Sso::SamlConfiguration.new
=> PG::UndefinedTable: ERROR:  relation "saml_configurations" does not exist

我最初的想法是,按照惯例,命名空间模型应该使用蛇形名称作为表名称,这样就Foo::Bar应该具有一个对应的foo_bars表。我的设置中缺少什么吗?

马丁·韦尔德霍

我想出了解决方案,方法是复制让我为我生成命名空间模型的rails会做什么

rails g model sso/test

invoke  active_record
create    db/migrate/20160226074853_create_sso_tests.rb
create    app/models/sso/test.rb
create    app/models/sso.rb
invoke    rspec
create      spec/models/sso/test_spec.rb
invoke      factory_girl
create        spec/factories/sso_tests.rb

我检查了这些新文件中的所有路径和名称约定,唯一遗漏的是文件app/models/sso.rb

创建以下内容解决了我的问题:

# app/models/sso.rb
module Sso
  def self.table_name_prefix
    'sso_'
  end
end

然后

rails d model sso/test

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何重命名方法与名超类现有的?

如何在直方图中使用字典重命名现有的xticklabel

蜂巢:是否可以重命名现有的蜂巢数据库?

在另一个项目/命名空间中使用现有的源代码

回送JS:重命名现有模型

如何将名称空间添加到现有的xml文件

如何重命名现有的Azure Logic应用程序?

Elasticsearch映射-重命名现有字段

复制并重命名现有的Visual Studio项目

具有名称空间的xslt重命名标签

如何为现有的eventhub命名空间添加kafka支持?

如何在GCP中使用gcloud cli重命名现有的“命名配置”?

向现有的Tensorflow模型添加{serve}元图

重命名DbContext类将失去与现有迁移/模型的关联

使用lxml更改现有的命名空间属性

重命名单个表继承Rails模型类名称,而不更改现有数据

如何“更新”现有的命名实体识别模型-而不是从头开始创建?

在现有的javascript视图模型中添加computedObservable

重命名现有的边缘关系?

将CCRC标签重命名为现有标签名称以合并代码

避免覆盖现有的命名管道

复制现有的png文件并以编程方式重命名

将命名空间和别名添加到现有的 xml

如何重命名现有的 Spark SQL 函数

ssis在不知道现有名称的情况下重命名文件

模型名称和命名空间

重命名现有的谷歌驱动器文件夹名称

如何在现有的 xml 文件中添加命名空间

使用 Ansible 将标签添加到现有的 XML 命名空间