gpt4 book ai didi

ruby-on-rails - Ruby on Rails自定义迁移生成器

转载 作者:行者123 更新时间:2023-12-03 16:10:33 25 4
gpt4 key购买 nike

我正在创建与Active Record紧密集成的Rails gem。 gem需要定义许多字段。例如:

class User < ActiveRecord::Base
# requires 'avatar_identifier', 'avatar_extension', 'avatar_size'
has_attached :avatar
end

是否可能有类似的东西:
rails g model user name:string avatar:attached

导致:
create_table :users do |t|
t.string :name
t.string :avatar_identifier
t.string :avatar_extension
t.integer :avatar_size
end

如果这不可能,则可以通过以下任何方式进行:
create_table :users do |t|
t.string :name
t.attached :avatar
end

生成多个字段?谢谢!

最佳答案

尽管Pravin确实指出了正确的方向,但我发现实现它并非易事。我做了以下工作,我在config/initializers中添加了一个文件(名称不相关),其中包含以下内容:

require 'active_support'
require 'active_record'

class YourApplication
module SchemaDefinitions

module ExtraMethod
def attachment(*args)
options = args.extract_options!
args.each do |col|
column("#{col}_identifier", :string, options)
column("#{col}_extension", :string, options)
column("#{col}_size", :integer, options)
end
end
end

def self.load!
::ActiveRecord::ConnectionAdapters::TableDefinition.class_eval { include YourApplication::SchemaDefinitions::ExtraMethod }
end

end
end


ActiveSupport.on_load :active_record do
YourApplication::SchemaDefinitions.load!
end

那么您可以执行以下操作:
rails g model Person name:string title:string avatar:attachment

这将创建以下迁移:
def self.up
create_table :people do |t|
t.string :name
t.string :title
t.attachment :avatar

t.timestamps
end
end

如果随后运行 rake db:migrate迁移,它将创建以下 Person模型:
ruby-1.9.2-p0 > Person
=> Person(id: integer, name: string, title: string, avatar_identifier: string, avatar_extension: string, avatar_size: integer, created_at: datetime, updated_at: datetime)

希望这可以帮助!!

关于ruby-on-rails - Ruby on Rails自定义迁移生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5202008/

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