将rails中的列从integer更改为float

时间:2013-08-13 19:01:46

标签: ruby-on-rails

我使用字段整数在customers表中有contact_number。 我尝试在rails c中创建一个记录,但显然它不能存储更大的数字字段。 我在网上四处看看我认为我应该使用浮点而不是整数,给出10个数字的精度,如状态

我的想法是用

创建一个新的迁移
class ChangeContactNumberInCustomerTableToFloatFromInteger < ActiveRecord::Migration
  def change_table 
    remove_column :customers, :contact_number, :integer
    add_column :customers, :contact_number, :float
  end
end

如何指定精度,这是正确的方法吗?

2 个答案:

答案 0 :(得分:6)

首先,如果我说contact_number是电话号码是正确的,您将需要使用字符串而不是数字字段。电话号码不是数字值,因为它们是数字的集合。或者更一般地说,它们是一组角色,恰好仅限于数字。

此外,解析区号和国家/地区代码也会更容易,如果这是相关的(但假设您需要解析国家/地区代码,则无论如何都要将它们存储在不同的列中,但是这是一个不同的讨论)

要直接回答您的问题,请改用change_column方法,如下所示:

change_column :customers, :contact_number, :string

此处的详细信息:http://api.rubyonrails.org/classes/ActiveRecord/Migration.html

答案 1 :(得分:2)

limit Sets the maximum size of the string/text/binary/integer fields
precision Defines the precision for the decimal fields
scale Defines the scale for the decimal fields
polymorphic Adds a type column for belongs_to associations

这是一个例子:

class AddDetailsToProducts < ActiveRecord::Migration
  def change
    add_column :products, :price, precision: 5, scale: 2
    add_reference :products, :user, polymorphic: true, index: true
  end
end

来自文档:http://guides.rubyonrails.org/migrations.html

以下是您的列可以接受的归档类型:

http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html#method-i-column