获取ActiveRecord对象属性的数据库类型

spi*_*ike 1 ruby-on-rails ruby-on-rails-3

假设我在schema.rb中有这个:

create_table "products" do |t|
 t.string   "name",                                           
 t.text     "description"
end
Run Code Online (Sandbox Code Playgroud)

我想要一种方法来找出产品属性的数据库类型是什么.

就像是: Product.column_type(:name) => "string"

这可能吗?

jdo*_*doe 6

Product.columns_hash['name'].type # => :string
Run Code Online (Sandbox Code Playgroud)

注意使用字符串而不是符号.

关于替代方案:sql_type

它将逻辑Rails类型映射到特定于DB的数据类型.对于一般用途我不建议使用它:您的生产数据库引擎将返回与sql_type开发数据库中的同一列不同的值(尽管它们都是使用相同的迁移文件创建的).布尔字段的示例:

# SQLite mapping:
:boolean => { :name => "boolean" }
# MySQL mapping:
:boolean => { :name => "tinyint", :limit => 1 }
Run Code Online (Sandbox Code Playgroud)

使用type在这两种情况下给你:boolean,因为你在迁移指定.