Rails:友谊加入表澄清

时间:2012-10-08 16:30:21

标签: ruby-on-rails

我正在处理我的第一个项目,并且正在尝试向我的应用添加“朋友”。但是,我在掌握友谊模型的概念方面遇到了一些麻烦,因为我的数据库中似乎不存在的属性似乎只是起作用。

我的模型和数据库列列在下面。我了解这是一个连接表,但在用户模型中friendsrequested_friendspending 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

1 个答案:

答案 0 :(得分:0)

您可能忘记了迁移,因为您的架构中没有status列。您引用的关联绑定到友谊表中存在friend_id密钥。最后2个关联只使用为belongs_to :friend定义的外键。请看一下here。我想这些关联可以在没有实际属性的情况下工作,如果这是你的意思,你只是在这里没有获得condition:功能,所有3个最后的关联将返回相同的值。