我试图了解一些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的术语中的关系到底是什么?它是完全定制的结构吗?如果是这样,哈希和数组之间是否有相似之处,还是应该被视为完全自定义的结构?
编辑:
经过一些更多测试后,它似乎只包含该类的对象。这是它的运作方式吗?
答案 0 :(得分:8)
Rails 3中的ActiveRecord Relation class实际上只是Arel之上的一层。它处理收集“延迟加载”和Rails简化查询方法的参数(与直接Arel相比)。
我见过的关于它内部运作的最佳描述是Ernie Miller's blog。他写了meta_search和meta_where所以他知道他在说什么。