我有一个名为的模型User
,我希望能够将其他用户作为Contact
. 更详细地说,我想要从用户到其他用户的单向关系,并且我希望能够将一个用户的拥有用户引用为“联系人”。另外,我想拥有与关系相关联的信息,所以我将向 usercontact 关系添加字段(我刚刚编辑了这句话)。
我试图这样做,同时使用这个问题的答案作为指导。
这是User
模型:
用户.rb
class User < ActiveRecord::Base
attr_accessible(:company, :email, :first_name, :last_name,
:phone_number, :position)
has_many(:user_contacts, :foreign_key => :user_id,
:dependent => :destroy)
has_many(:reverse_user_contacts, :class_name => :UserContact,
:foreign_key => :contact_id, :dependent => :destroy)
has_many :contacts, :through => :user_contacts, :source => :contact
end
我还创建了模型UserContact
作为将联系人连接到用户的一部分:
用户联系人.rb
class UserContact < ActiveRecord::Base
belongs_to :user, :class_name => :User
belongs_to :contact, :class_name => :User
end
这是我使用的 create_users.rb 迁移文件:
create_users.rb
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :first_name
t.string :last_name
t.string :phone_number
t.string :email
t.string :company
t.string :position
t.timestamps
end
end
end
这是 create_users_contacts.rb 迁移:
create_users_contacts.rb
class CreateUsersContacts < ActiveRecord::Migration
def up
create_table :users_contacts, :force => true do |t|
t.integer :user_id, :null => false
t.integer :contact_id, :null => false
t.boolean :update, :null => false, :default => false
end
# Ensure that each user can only have a unique contact once
add_index :users_contacts, [:user_id, :contact_id], :unique => true
end
def down
remove_index :users_contacts, :column => [:user_id, :contact_id]
drop_table :users_contacts
end
end
但是,由于我不知道的原因,我相信链接中出现了问题,因为在我的用户索引页面上,我有一个使用 的列<td><%= user.contacts.count %></td>
,但是当我尝试加载页面时,我从该行收到此错误:
uninitialized constant User::UserContact
我认为这个问题可能与我想将与另一个用户关联的用户命名为联系人这一事实有关,因为我找不到其他这样做的例子,而且据我所知,我正在正确地做所有事情(与其他示例类似)。
我发现的最接近的类似问题在这个问题中得到了概述和解决。问题是他的连接模型的命名不正确,但是我仔细检查了我的命名,它没有那个提问者的问题。
任何帮助表示赞赏,让我知道是否需要任何其他文件或信息来诊断为什么会发生这种情况。
编辑
将 usercontact.rb 更改为 user_contact.rb 后,我现在收到此错误:
PG::Error: ERROR: relation "user_contacts" does not exist
LINE 1: SELECT COUNT(*) FROM "users" INNER JOIN "user_contacts" ON "...
^
: SELECT COUNT(*) FROM "users" INNER JOIN "user_contacts" ON "users"."id" = "user_contacts"."contact_id" WHERE "user_contacts"."user_id" = 1
编辑两个
问题是我的链接表 users_contacts 命名错误,应该是 user_contacts!所以我修复了它,现在它似乎工作了!