Has_and_belongs_to_many相同的模型

时间:2014-08-19 05:12:33

标签: ruby-on-rails many-to-many jointable

我有和用户模型需要拥有'本身。这是因为用户与另一个用户连接的唯一方法是,如果他们有这样的“绑定”。

所以...我创建了一个'加入模型':

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的所有权关系将是自动的。

我在这里失踪了什么?

提前完成

1 个答案:

答案 0 :(得分:0)

我应该自己创造反向关系。