0

私は現在、最初のプロジェクトに取り組んでおり、アプリに「フレンドリング」を追加しようとしています。ただし、データベースに存在しないように見える属性が機能しているように見えるため、友情モデルの概念を理解するのに少し苦労しています。

モデルとデータベースの列を以下に示します。これは結合テーブルであることを理解していますが、ユーザーモデルでは、、、、friendsおよびrequested_friendsがテーブルpending friendsに存在しない場合はどこから取得されfriendshipsますか?移行せずに必要な列を追加できる仮想結合テーブルだからですか?

また、その列が私のテーブル@user.pending_friends.eachに存在しなくても、チュートリアルは最終的には実行されます。users私はこの部分でかなり混乱しています。

現在、私はこの簡単なチュートリアルを行っています:http ://railsforum.com/viewtopic.php?id=16760

これが私のファイルです:

ユーザーモデル

class User < ActiveRecord::Base
...
...
has_many :friendships, :dependent => :destroy
has_many :friends, :through => :friendships, :conditions => "status = 'accepted'"
has_many :requested_friends, :through => :friendships, :source => :friend, :conditions => "status = 'requested'", :order => :created_at
has_many :pending_friends, :through => :friendships, :source => :friend, :conditions => "status = 'pending", :order => :created_at

終わり

友情モデル

class Friendship < ActiveRecord::Base
  attr_accessible :friend_id

  belongs_to :user
  belongs_to :friend, :class_name => "User"
end

スキーマ

create_table "friendships", :force => true do |t|
  t.integer  "user_id"
  t.integer  "friend_id"
  t.datetime "created_at", :null => false
  t.datetime "updated_at", :null => false
end

create_table "users", :force => true do |t|
  t.string   "name"
  t.string   "email"
  t.datetime "created_at",      :null => false
  t.datetime "updated_at",      :null => false
  t.string   "password_digest"
  t.string   "remember_token"
end
4

1 に答える 1

0

statusスキーマに列がないため、移行を忘れた可能性があります。参照している関連付けは、友情テーブルに存在friend_idするキーにバインドされています。最後の2つの関連付けは、に対して定義された外部キーを使用しているだけです。こちらをご覧ください。このような関連付けは、実際の属性がなくても機能すると思います。これが意図したとおりである場合、ここでは機能が得られず、最後の3つの関連付けすべてが同じ値を返します。belongs_to :friendcondition:

于 2012-10-08T18:51:55.277 に答える