2017-01-03 48 views
0

我正在使用Gem active_hash https://github.com/zilkey/active_hash为简单数据创建模型,我不想为其创建数据库表。无法访问ActiveHash中的数据

例如,我有域类型这个模型建立:

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工程,但其他方法不。

回答

2

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) } 
+0

没关系啊感谢。这看起来很有用! – Cameron

+0

没问题!快乐你得到它的工作! –