1

在 Ruby on Rails 中,假设一个 Story 对象可以“has_many”投票对象(一个故事被许多用户投票为“热门”)。

所以当我们做一个

s = Story.find(:first)

s是一个 Story 对象,并说

s.votes

返回[]

s.votes.class

返回Array

很明显, s.votes 是一个空的 Array 对象。

这时,当

s.votes.create

被调用,它实际上调用了Vote类的一个方法?Array 类对象怎么会调用 Vote 类方法?

4

2 回答 2

4

在您的情况下,.votes不是返回一个,而是Array返回一个特殊Association对象。

它看起来像 an 的原因Array是因为关联对象将其所有方法(除了动态方法之外)委托create给它内部保存的数组对象。而且,这意味着当您调用.class对象时,它也会被委托给 Array 对象。

于 2010-05-23T07:16:03.190 回答
1

votes不是数组,它是Story对象的方法。Vote如果你单独调用它,它会返回一个包含与它关联的所有记录的数组StoryArray你这样做s.votes.class的原因s.votes是返回一个数组(在这种情况下它是空的,因为s没有投票)并且你正在检查返回数组的类。

反过来,s.votes.create这是 Rails 根据您的模型关联动态生成的另一种方法。这不是一种方法Array

于 2010-05-23T06:14:11.380 回答