我正在使用Gem active_hashhttps://github.com/zilkey/active_hash为我不想创建DB表的简单数据创建模型。
例如,我有FieldTypes:的模型设置
class FieldType < ActiveHash::Base
self.data = [
{:id => 1, :name => "text", :friendly_name => "Text"},
{:id => 2, :name => "textarea", :friendly_ => "Text Area"},
{:id => 3, :name => "image", :friendly_ => "Image"},
]
end
我试图列出这些字段类型以供选择:
def field_types_for_select
#FieldType.all.order('name asc').collect { |t| [t.friendly_name, t.name] }
FieldType.pluck(:friendly_name, :name)
end
但我犯了一个错误,订单、收集或提取都没有定义。
如何访问这些数据?这在其他模型上运行良好,只是ActiveHash模型不适用。根据文档,该模型应该和ActiveRecord一样工作,但我似乎无法访问它。FieldType.all
有效,但其他方法无效。
Pluck未在ActiveHash::Base
上定义。它是在ActiveRecord::Relation::Calculations
上定义的,其目的是为指定的列生成SQL选择。您将无法使它与ActiveHash
一起工作。
但是,您可以在FieldType
模型上定义自己的pluck
。
def self.pluck(*columns)
data.map { |row| row.values_at(*columns) }
end
或者直接查询数据:
FiledType.data.map { |row| row.values_at(:friendly_name, :name) }