0

我目前正在做我的第一个项目,并试图在我的应用程序中添加“交友”功能。但是,我在理解友谊模型的概念时遇到了一点麻烦,因为我的数据库中似乎不存在的属性似乎只是工作。

下面列出了我的模型和数据库列。我知道这是一个连接表,但是在用户模型中friends,如果它们不存在于表中,它们来自requested_friends哪里?是因为它是一个虚拟连接表,所以我可以添加我需要的任何列而无需迁移它们?pending friendsfriendships

@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 回答