我正在处理我的第一个项目,并且正在尝试向我的应用添加“朋友”。但是,我在掌握友谊模型的概念方面遇到了一些麻烦,因为我的数据库中似乎不存在的属性似乎只是起作用。
我的模型和数据库列列在下面。我了解这是一个连接表,但在用户模型中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
答案 0 :(得分:0)
您可能忘记了迁移,因为您的架构中没有status
列。您引用的关联绑定到友谊表中存在的friend_id
密钥。最后2个关联只使用为belongs_to :friend
定义的外键。请看一下here。我想这些关联可以在没有实际属性的情况下工作,如果这是你的意思,你只是在这里没有获得condition:
功能,所有3个最后的关联将返回相同的值。