gpt4 book ai didi

ruby-on-rails - 创建 Rails Engine/Gem 以修改现有模型数据库表

转载 作者:行者123 更新时间:2023-12-02 01:07:29 25 4
gpt4 key购买 nike

我之前问过这个但没有收到任何有用的答案,所以我再试一次......

我需要创建一个 gem 或引擎,将所需的列/属性添加到主应用程序中的现有模型。与 devise gem 可以创建模型或将 devise 所需属性附加到现有模型的方式类似。

我的想法是,gem 需要一个类似于 rails generate devise:install 的安装脚本,它将创建所需的迁移。

我们将不胜感激任何链接、教程或建议。

最佳答案

因此,正如@23tux 所建议的那样,我继续查看 devise gem 代码库并找到了我需要的解决方案。

lib/generators/{gem_name} 中,我创建了一个名为 {gem_name}_generator 的文件,在其中我能够遵循 https://github.com/plataformatec/devise/blob/master/lib/generators/devise/devise_generator.rb 的模式并创建一个迁移以附加到应用中的现有模型。

require 'rails/generators/named_base'
require 'rails/generators/active_record'

module GemName
module Generators
class GemNameGenerator < ActiveRecord::Generators::Base

include Rails::Generators::ResourceHelpers

namespace "gem_name"

desc "Creates GemName Migrations"

source_root File.expand_path("../templates", __FILE__)

def copy_migration
migration_template "migration_existing.rb", "db/migrate/add_gem_name_to_#{plural_name.downcase}"
end

def migration_data
<<RUBY
## Add active column to table
t.datetime :started_trial, :default => Time.now, :after => :id
t.boolean :active, :default => true, :after => :started_trial
t.boolean :allowed_past_trial, :default => false, :after => :active
RUBY
end
end
end
end

class_nameplural_name 是可访问的,因为我在终端中运行了 $ rails generate gem_name account

因此 class_name = 'account' 和 plural_name = 'accounts'

migration_existing.rb 位于 lib/generators/{gem_name}/templates 并具有以下代码:

class AddGemNameTo<%= plural_name.camelize %> < ActiveRecord::Migration
def self.up
change_table(:<%= plural_name %>) do |t|
<%= migration_data %>
end
end

def self.down
# By default, we don't want to make any assumption about how to roll back a migration when your
# model already existed. Please edit below which fields you would like to remove in this migration.
raise ActiveRecord::IrreversibleMigration
end
end

关于ruby-on-rails - 创建 Rails Engine/Gem 以修改现有模型数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20884315/

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