私は現在、最初のプロジェクトに取り組んでおり、アプリに「フレンドリング」を追加しようとしています。ただし、データベースに存在しないように見える属性が機能しているように見えるため、友情モデルの概念を理解するのに少し苦労しています。
モデルとデータベースの列を以下に示します。これは結合テーブルであることを理解していますが、ユーザーモデルでは、、、、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