gpt4 book ai didi

ruby-on-rails - 如何创建自定义 Rails 生成模型函数?

转载 作者:搜寻专家 更新时间:2023-10-30 23:35:26 24 4
gpt4 key购买 nike

我有一个 Rails 5 应用程序,它具有针对三个数据库的单独迁移。我正在添加一个新数据库。我通常执行 rails g model field1:type1 field2:type2 field3:type.... 来创建包含所需字段的数据库表。我想创建生成模型语句,它将为所需的数据库生成模型并将其放入相应的 db/migrate 文件夹中。

我在 lib/generators 中为其他数据库提供了自定义数据库迁移生成器。这是自定义迁移生成器的示例。

lib/generators/stats_migration_generator.rb

require 'rails/generators/active_record/migration/migration_generator'

class StatsMigrationGenerator < ActiveRecord::Generators::MigrationGenerator
source_root File.join(File.dirname(ActiveRecord::Generators::MigrationGenerator.instance_method(:create_migration_file).source_location.first), "templates")

def create_migration_file
set_local_assigns!
validate_file_name!
migration_template @migration_template, "db_stats/migrate/#{file_name}.rb"
end
end

我假设我需要为每个附加数据库创建 lib/generators/mydb_model_generator.rb 或任何正确的文件名结构。在看了 model_generator.rb 之后,我想我可以做这样的事情GitHub 中的文件。

lib/generators/stats_model_generator.rb

require 'rails/generators/active_record/model/model_generator'

class StatsModelGenerator < ActiveRecord::Generators::ModelGenerator
source_root File.join(File.dirname(ActiveRecord::Generators::ModelGenerator.instance_method(:create_migration_file).source_location.first), "templates")

def create_migration_file
set_local_assigns!
validate_file_name!
migration_template @migration_template, "db_stats/migrate/#{file_name}.rb"
end
end

这是我查看 Rails 的 git 存储库后的问题,the Rails Guide regarding creating and customizing Generators和 Ruby on Rails API 文档:

  1. 如何找到我需要的内容?
  2. 如何找到覆盖 db/migrate 文件夹名称所需的方法?
  3. 我如何知道如何命名模型生成器的 rb 文件?

我在尝试创建模型生成器时的假设是否正确?

最佳答案

好吧,我没想到我会这么快找到解决方案。我又看了看 model_generator.rb在 GitHub 上,顿时恍然大悟。我意识到我只需要用指向我想要的 db migrate 文件夹的版本替换默认生成器中的方法。这是我想出的解决方案。

require 'rails/generators/active_record/model/model_generator'

class MydbModelGenerator < ActiveRecord::Generators::ModelGenerator
source_root File.join(File.dirname(ActiveRecord::Generators::ModelGenerator.instance_method(:create_migration_file).source_location.first), "templates")

def create_migration_file
return unless options[:migration] && options[:parent].nil?
attributes.each { |a| a.attr_options.delete(:index) if a.reference? && !a.has_index? } if options[:indexes] == false
migration_template "../../migration/templates/create_table_migration.rb", File.join("db_mydb/migrate", "create_#{table_name}.rb")
end
end

现在我可以执行 rails g mydb_model field1:type1 field2:type2 field3:type 并在正确的迁移文件夹中创建模型迁移文件。

关于ruby-on-rails - 如何创建自定义 Rails 生成模型函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43355727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com