1

我有一个名为的模型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!所以我修复了它,现在它似乎工作了!

4

1 回答 1

1

您需要将您的重命名usercontact.rbuser_contact.rb

这是 rails autoload 使用的命名约定。

于 2013-06-30T23:35:24.920 回答