1

Ruby on Rails では、Story オブジェクトが "has_many" の Vote オブジェクトを使用できるとします (ストーリーは多くのユーザーによって "ホット" と投票されます)。

だから私たちがするとき

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オブジェクトが返されます。

のように見える理由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 に答える