我目前正在做我的第一个项目,并试图在我的应用程序中添加“交友”功能。但是,我在理解友谊模型的概念时遇到了一点麻烦,因为我的数据库中似乎不存在的属性似乎只是工作。
下面列出了我的模型和数据库列。我知道这是一个连接表,但是在用户模型中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