私は Rails を初めて使用し、Michael Hartl の「Ruby on Rails 3 チュートリアル」を完了しました。この本は私に多くのことを教えてくれますが、このパズルは私には理解できません。
User モデル内でパズル、つまり、わからないことをプレビューするには、
has_many :following, :through=>:relationship, :source=>:followed
このコードが「user.following」を User インスタンスの配列にリンクする方法。
そして下はパズル全体です。
まず、followed_idおよびfollower_id情報を記録するRelationshipモデルがあります。リレーションシップモデルの内部では、関連付けは次のように単純です。
class Relationship < ActiveRecord::Base
attr_accessible :followed_id
belongs_to :follower, :class_name => "User"
belongs_to :followed, :class_name => "User"
end
次に、 User モデル内で、ユーザーはfollowerの役割を引き受け、関係の関連付けを通じて関係テーブル内の後続のすべての行を収集します。
class User < ActiveRecord::Base
.
.
.
has_many :relationships, :foreign_key => "follower_id", :dependent => :destroy
.
今まで、私はそれを手に入れました。
しかし、次の行で混乱が生じました。ここでは、user.followingを使用して、そのユーザーのすべてのフォロー (ユーザー インスタンス) を組み立てることができます。そのようです、
has_many :following, :through=>:relationships, :source=>:followed
:source=>:followedがデフォルトを上書きし、そのユーザーに関連付けられているすべてのfollowed_idsを見つけさせることを理解しています。
しかし、Rails はどうやってfollowed_idを認識してUserオブジェクトにリンクするのでしょうか? ラベル名がusersと一致しないか、 :class_nameが指定されていません。Rails がこの基礎となる作業をどのように行っているのか理解できないか、いくつかのヒントを見逃していました。
ありがとうございました!:)