У меня есть модель пользователя, которая должна «владеть» собой. Это потому, что единственный способ для пользователя соединиться с другим - это если у него есть эта «привязка».
Итак... Я создал "модель соединения":
class CreateUserConnections < ActiveRecord::Migration
def change
create_table :user_connections, id: false do |t|
t.string :token
t.integer :user_a_id, :null => false
t.integer :user_b_id, :null => false
t.timestamps
end
add_index :user_connections, :token, unique: true
add_index :user_connections, [:user_a_id, :user_b_id], unique: true
end
end
а также
class UserConnection < ActiveRecord::Base
belongs_to :user
belongs_to :user_a, :class_name => 'User'
belongs_to :user_b, :class_name => 'User'
before_create :generate_token
protected
def generate_token
self.token = loop do
random_token = SecureRandom.urlsafe_base64(nil, false)
break random_token unless UserConnection.exists?(token: random_token)
end
end
end
а затем создал отношение к моей пользовательской модели:
#unlocked users
has_and_belongs_to_many :users,
:join_table => "user_connections",
:foreign_key => "user_a_id",
:association_foreign_key => "user_b_id"
Проблема в том, что когда я создаю отношения с пользователем, например:
User.find(1).users << User.find(2)
Он создает собственное отношение от Пользователя 1 к Пользователю 2, но я думал, что с отношением many_to_many отношение владения от пользователя 2 к 1 будет автоматическим.
Что мне здесь не хватает?
Спасибо заранее