Ruby on Rails 自定义迁移生成器

2024-03-02

我正在创建一个与 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 model:

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) 

希望这可以帮助!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby on Rails 自定义迁移生成器 的相关文章

随机推荐

  • 如何在 Python 2 中正确编码向量化函数条目

    所以我玩了一些我在网上找到的使用Python 3处理优化的代码 修改后 它呈现了这样的图 现在我正在使用Python 2 并且 尚未处理 我相信问题是Python迭代 但是当遵循中建议的括号技巧时我没有得到任何结果这个帖子 https st
  • 如何获取Xvfb显示编号

    如何获取运行 Xvfb 时使用的显示编号 例如有人跑 Xvfb 14 我需要以某种方式获取使用过的显示器编号 14 提前致谢 在 UNIX 系统上 运行 ps ef grep Xvfb 它应该将其与流程一起列出
  • 在 Android 中使用 RegEx 分割字符串

    我一直在尝试分开Strings使用正则表达式没有成功 这个想法是将给定的音乐文件元数据与其文件名分开 以便 01 Kodaline Autopilot mp3 会导致 metadata 0 01 metadata 1 Kodaline me
  • Rails:编辑表单中的序列化数据

    我有一个模型 它有一个参数 即序列化哈希 我希望能够使用内置的 Rails 功能来编辑表单中的哈希值 这是almost在职的 如果您填写表单并提交 参数将被正确序列化 并且在控制器中模型将使用预期值构建 当我希望表单显示现有模型时 它就会崩
  • 要求通用方法在 FAIL 时抛出特定异常类型

    是的 我知道我完全会看起来像个白痴 但我的大脑只是not今天早上开始工作 我想要一种方法 我可以说 如果它变坏 则返回这种类型的异常 对吧 例如 类似 这不起作用 static ExType TestException
  • CTC:空格和空白有什么区别?

    2006年article https www cs toronto edu graves icml 2006 pdf关于联结主义时间分类 Alex Graves co 引入了一种解码语音的模型27标签 26 个用于字母表字母 1 个用于bl
  • C++ 防止 const 方法通过成员指针或引用更改数据

    假设我有一个像这样的简单课程 class Foo public void foo const str 5 x obj gt changeTheWorld x 4 y get 5 obj2 gt changeTheWorld private
  • Mongodb查找对象内最长数组的查询

    我目前在 mongo 中为我的应用程序设置了这样的对象 简化的示例 为了清楚起见 我在这里删除了一些不相关的字段 id ObjectId 529159af5b508dd71500000a c somecontent l d 2013 11
  • JNI 错误:访问过时的弱全局引用

    我在本机代码中缓存了对 Java 对象的引用 如下所示 java global reference deleter JAVA ENV is an instance of JNIEnv that is cached globally and
  • Apache Nifi:使用更新记录处理器替换列中的值

    我有一个 csv 看起来像这样 name code age Himsara 9877 12 John 9437721 16 Razor 232 45 我必须更换色谱柱code根据一些正则表达式 我的逻辑如下面的 Scala 代码所示 if
  • 如何在 couchdb 中索引多维数组

    我有一个多维数组 我想用 CouchDB 对其进行索引 实际上使用 Cloudant 我的用户有他们所属团队的列表 我想搜索找到该团队的每个成员 因此 获取所有具有 ID 为 79d25d41d991890350af672e0b76faed
  • 数据建模草稿/报价/订单/发票

    我目前正在开发一个小项目 我需要对以下场景进行建模 Scenario 客户打电话来 他想要一辆新车的报价 销售代表 登记客户信息 销售代表 在系统中创建报价 并将一个项目添加到报价中 汽车 销售代表 通过电子邮件将报价发送给客户 客户接受报
  • GWT 应用程序仅在 IE 中抛出“JavaScriptException”,堆栈跟踪没有有用的信息

    我的 GWT 应用程序在某个时刻抛出 JavaScriptException 此问题仅出现在 Internet Explorer 中 IE 8 和运行 IE7 模式的 IE 8 堆栈跟踪如下 com google gwt core clie
  • App Center iOS 安装错误:“无法安装此应用程序,因为无法验证其完整性”

    我发现这个问题已被问过很多次 但我没有看到适合我的解决方案 因此我希望提供更多信息可能会有所启发 We use 应用中心 ms https appcenter ms 测试 iOS 应用程序 在我们的 iOS 证书过期之前 此方法运行良好 我
  • 从设备查看或检索 Core Data .sqlite 文件

    我怎样才能真正在真实设备 而不是模拟器 上查看核心数据存储的 sqlite 文件 是否有工具可以让您查看核心数据信息 在 Xcode 中 打开设备窗口 shift cmd 2 从左侧列表中选择您的设备 从 已安装的应用程序 列表中选择您的应
  • 如何自动补全特定目录下的文件?

    我创建了一个命令memo如下 memo vi HOME memo 1 我想将 bash completion 应用于我的memo打开已经存在的文件 HOME memo目录 memo TAB to show files in HOME mem
  • 凸多面体的质心

    我有一个封闭的凸多面体 它由凸多边形 面 数组定义 而凸多边形 面 由 3D 空间中的顶点数组定义 我试图找到多面体的质心 假设密度均匀 目前我用这个伪代码中的算法计算它 public Vector3 getCentroid Vector3
  • VirtualBox 上的 Mac 操作系统无法识别 Iphone

    我一直在尝试将 iPhone 连接到 Mac OS High Sierra 我已经安装在 VirtualBox 上来测试我正在尝试开发的 swift 应用程序 但是 即使我将手机连接到 USB 我也无法从设备中选择手机 设备部分中的消息显示
  • JavaFx setOnCloseRequest & 文件检查等待

    我有两个窗户 如果属性文件不存在 则启动第一个 第二个是 我希望它 在文件已经存在或用户单击创建文件的按钮时打开 这是代码 try if f exists input new FileInputStream config propertie
  • Ruby on Rails 自定义迁移生成器

    我正在创建一个与 Active Record 紧密集成的 Rails gem gem 需要定义许多字段 例如 class User lt ActiveRecord Base requires avatar identifier avatar