Ruby   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ruby-on-rails – Ruby on Rails自定义迁移生成器大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在创建一个与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

生成多个字段?谢谢!

解决方法

然普拉文确实指出了正确的方向,但我发现实施它并不简单.@R_508_10673@下,我在config / initializers中添加了一个文件(名称不相关),包含以下内容:
require 'active_support'
require 'active_record'

class YourApplication
  module scheR_456_11845@aDefinitions

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

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

  end
end


ActiveSupport.on_load :active_record do
  YourApplication::scheR_456_11845@aDefinitions.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 @R_764_6964@
    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: datetiR_456_11845@e,updated_at: datetiR_456_11845@E)

希望这可以帮助!!

大佬总结

以上是大佬教程为你收集整理的ruby-on-rails – Ruby on Rails自定义迁移生成器全部内容,希望文章能够帮你解决ruby-on-rails – Ruby on Rails自定义迁移生成器所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。