究竟什么是ActiveRecord Rails关系?

时间:2011-04-30 21:03:31

标签: ruby-on-rails ruby activerecord

我试图了解一些Rails Relations的内部结构,以便在查询中有效地使用它们。因此,我打开了一个控制台并进行了一些测试:

ruby-1.9.2-p180 :036 > Skill.where(:second_class => 'Wealth Ranger').map {|att| att.class}
 => [Skill(id: integer, name: string, description: string, second_class: string, third_class: string, created_at: datetime, updated_at: datetime)]

现在,我不希望输出。我会期待像Relation或类似的东西。但它似乎遍历每个属性并为每个属性生成类型。

Ruby的术语中的关系到底是什么?它是完全定制的结构吗?如果是这样,哈希和数组之间是否有相似之处,还是应该被视为完全自定义的结构?

编辑:

经过一些更多测试后,它似乎只包含该类的对象。这是它的运作方式吗?

1 个答案:

答案 0 :(得分:8)

Rails 3中的ActiveRecord Relation class实际上只是Arel之上的一层。它处理收集“延迟加载”和Rails简化查询方法的参数(与直接Arel相比)。

我见过的关于它内部运作的最佳描述是Ernie Miller's blog。他写了meta_searchmeta_where所以他知道他在说什么。