ruby-on-rails - rails : creating a custom data type/creating a shorthand

标签 ruby-on-rails ruby code-generation types customization

我想知道如何创建自定义数据类型以在 rake 迁移文件中使用。示例:如果您要创建模型,则可以在迁移文件中添加列。它可能看起来像这样:

  def self.up
    create_table :products do |t|
      t.column :name, :string
      t.timestamps
    end
  end

我想知道如何创建这样的东西:

t.column :name, :my_custom_data_type

之所以这样创建,例如一个“货币”类型,无非是一个精度为8,小数位数为2的小数。由于我只使用MySQL,所以这个数据库的解决方案已经足够了。

感谢您的反馈和意见!

最佳答案

您要做的是定义一个新的列创建方法,该方法提供创建自定义类型的选项。这基本上是通过在迁移中添加一个行为类似于 t.integer ... 的方法来完成的。诀窍是弄清楚在哪里添加该代码。

在初始化目录中的某个地方放置这段代码:

module ActiveRecord::ConnectionAdapters
  class TableDefinition
    def currency (*args)
      options = args.extract_options!
      column_names = args
      options[:precision] ||= 8
      options[:scale] ||= 2
      column_names.each { |name| column(name, 'decimal', options) }
    end                                                                     
  end
end

现在您可以随时使用货币方法定义货币列。

例子:

def self.up
  create_table :products do |t|
    t.currency :cost
    t.timestamps
  end
end

向现有表中添加货币列:

def self.up
  change_table :products do |t|
    t.currency :sell_price
  end
end   

警告:我没有时间对其进行测试,因此无法保证。如果它不起作用,它至少应该让您走上正轨。

关于ruby-on-rails - rails : creating a custom data type/creating a shorthand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2617447/

相关文章:

ruby-on-rails - 获取任何类型的 URL 格式的域名? -- PHP 到 Ruby

Proc 的 Ruby 比较操作?

java - 有没有办法在 Java 中动态生成变量的名称?

ruby-on-rails - 更改记录的变量 created_at 属性

ruby-on-rails - 在本地使用 sqlite3 在 Heroku 上设置 Rails 3.2.2 应用程序

ruby-on-rails - 将 premailer gem 与 Rails 2.X 应用程序集成

c# - 用动态语言实现访问者模式的首选方法?

Delphi 2010 - 属性向导或类似的东西,以避免手动编码 getter/setter

perl - 为什么相同的函数调用在对象内部会带来不同的结果?

ruby-on-rails - 新项目配置