2011-04-30 126 views
3

我试图理解一些Rails关系的内部,以便在查询中有效地使用它们。因此,我打开了一个控制台,并做了一些测试:什么是ActiveRecord Rails关系?

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)] 

现在,我不会指望输出。我期望像关系或类似的东西。但它好像遍历每个属性并为每个属性生成类型。

什么是Ruby的一个方面的关系真的吗?它是一个完全自定义的结构吗?如果是这样,哈希和数组之间是否有相似之处,还是应该将它看作是完全自定义的结构?

编辑:

一些测试后,现在看来似乎只是包含类的对象。它是如何运作的?

+1

http://railscasts.com/episodes/239-activerecord-relation-walkthrough – Thilo 2011-04-30 21:08:05

+0

这是一个普通班,其中to_s已被重写要显示的属性。 – michaeltomer 2011-04-30 21:09:09

+0

我已经注意到了,确实很不错,但它主要是描述关系而不会提供有关对象发生的事情的太多信息。 – Spyros 2011-04-30 21:09:16

回答

8

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

我已经看到了它的最好的说明的内部运作是Ernie Miller's blog。他写了meta_searchmeta_where,所以他知道他在说什么。

+0

ahh伟大的资源thanx! – Spyros 2011-05-01 01:26:41