という名前のモデルがあり、User
他のユーザーを として自己参照できるようにしたいと考えていますContact
。より詳細には、ユーザーから他のユーザーへの一方向の関係が必要であり、あるユーザーの所有ユーザーを「連絡先」として参照できるようにしたいと考えています。また、関係に関連付けられた情報が必要なので、usercontact 関係にフィールドを追加します (この文を編集したところです)。
この質問への回答をガイドとして使用しながら、これを実行しようとしました。
User
モデルは次のとおりです。
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
また、連絡先をユーザーに接続する一環としてモデルを作成しました。
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
編集 2
問題は、リンク テーブル users_contacts の名前が間違っていて、user_contacts である必要があったことです。修正したところ、動作するようになりました!!