在Active Record中添加自定义列数据类型

时间:2011-02-11 01:21:06

标签: mysql ruby-on-rails-3 postgresql activerecord rails-migrations

在我的本地机器上,我使用MySQL开发我的Rails应用程序,但在部署时我使用的是使用PostgreSQL的Heroku。我需要创建一个新的数据类型,特别是我希望将其称为longtext,并且它需要映射到任一数据库中的单独列类型。

我一直在寻找这个。我的基本想法是我需要覆盖ActiveRecord :: ConnectionAdapters :: * SQL适配器中的一些哈希,但我想我会在这里查阅丰富的知识,看看这是否是一个好方法(和,如果可能的话,指示如何做到这一点)或者是否有另一种快速获胜方式。

现在数据类型是“字符串”,我的插入失败,因为数据类型太长。我想在MySQL和Pg​​SQL上使用相同的功能,但看起来没有通用的数据类型可以为我提供无限的文本blob列类型?

我的想法是,我希望这个应用程序能够正确运行(使用迁移)两种数据库技术。

非常感谢。

2 个答案:

答案 0 :(得分:3)

为什么不在开发机器上安装PostgreSQL?下载它,点击“确定”几次,你就开始运行了。这不是火箭科学: - )

http://www.postgresql.org/download/

PostgreSQL对数据类型没有限制,你可以创建任何你想要的东西,这取决于你的想象力:

CREATE DOMAIN(仅限简单的东西)

CREATE TYPE(无限制)

答案 1 :(得分:0)

Frank提到的SQL实际上就是答案,但我真的在寻找一种更具体的方法来进行RDBMS特定的Rails迁移。原因是我想保持我的应用程序可以在PostgreSQL和MySQL上运行的事实。

class AddLongtextToPostgresql < ActiveRecord::Migration
  def self.up
    case ActiveRecord::Base.connection.adapter_name
    when 'PostgreSQL'
      execute "CREATE DOMAIN longtext as text"
      execute "ALTER TABLE chapters ALTER COLUMN html TYPE longtext"
      execute "ALTER TABLE chapters ALTER COLUMN body TYPE longtext"
    else
      puts "This migration is not supported on this platform."
    end
  end

  def self.down
  end
end

这实际上就是我想要的。