我想知道是否有可能以编程方式获取类型(如迁移脚本和数据库中的AR-eg所述)(我知道数据存在于其中的某个地方).

例如,我可以处理所有属性名称:

ar.attribute_names.each { |name| puts name }

.attributes只返回名称到其当前值的映射(例如,如果未设置字段,则没有类型信息).

我在一些地方看到了它的类型信息:

在脚本/控制台中,键入AR实体的名称:

>> Driver
=> Driver(id: integer, name: string, created_at: datetime, updated_at: datetime)

很明显,它知道这些类型.还有.column_for_属性,它采用attr名称并返回一个column对象,该对象的类型隐藏在底层数据库column对象中,但它似乎不是一种干净的获取方式.

我还想知道是否有一种方法对即将推出的新"ActiveModel"(rails3)友好,并且与数据库细节分离(但可能类型信息不会成为其中的一部分,我似乎无法确定它是否是).

谢谢

推荐答案

在Rails 3中,对于模型"Driver",您需要Driver.columns_hash.

Driver.columns_hash["name"].type  #returns :string

如果你想遍历它们,你可以这样做:

Driver.columns_hash.each {|k,v| puts "#{k} => #{v.type}"}

将输出以下内容:

id => integer
name => string
created_at => datetime
updated_at => datetime

Ruby-on-rails相关问答推荐

Ruby线程使用互斥处理并发问题

如何在_serialize之前执行代码?""或者如何在序列化属性之前对属性进行清理?

有什么办法能把这写清楚吗?

Sidekiq with Rails - 控制台与 rake 任务中的不同 Sidekiq 实例

Ruby on Rails - 外键不匹配

Rails 7 中的预编译

使用has_many_through关联创建记录 – Ruby on Rails

如何为 I18n 设置 raise_on_missing_translations

Ruby on Rails 7 与 React 集成

如何从 Ruby on Rails 应用程序返回正确的 HTTP 错误代码

为 ActionMailer 渲染不同的视图(模板)

Postgres on Rails 致命:数据库不存在

禁用 RVM 或使用没有 RVM 安装的 Ruby?

保存后重定向到索引而不是显示

Django 还是 Ruby-On-Rails?

rbenv:没有 gemsets 生存

反编译开发assets资源 管道

保存用户偏好的最佳方法?

如何测试也定义为辅助方法的 ApplicationController 方法?

设置EDITOR或BUNDLER_EDITOR环境变量