Как установить отношения между пользователем и всеми другими пользователями?

Я создаю свое первое приложение Rails, чтобы изучить основы, и это простой сайт знакомств.

Я пытаюсь спроектировать способ, которым пользователи будут ассоциироваться друг с другом. Процент совпадения будет определяться путем сравнения определенных атрибутов профиля пользователя. У каждого пользователя будет процент совпадения с каждым другим пользователем (аналогично OKCupid). Таким образом, когда пользователь создается (или обновляется), его совпадения генерируются вместе с ним.

Это мое представление о том, как это будет выглядеть до сих пор:

# scheme.rb
create_table "matchables", force: :cascade do |t|
    t.integer  "user_one_id"
    t.integer  "user_two_id"
    t.datetime "created_at",  null: false
    t.datetime "updated_at",  null: false
    t.index ["user_one_id"], name: "index_matchables_on_user_one_id"
    t.index ["user_two_id"], name: "index_matchables_on_user_two_id"
    t.index ["user_one_id", "user_two_id"], 
            name: "index_matchables_on_user_one_id_and_user_two_id", 
            unique: true
end

# matchable.rb
class Matchable < ApplicationRecord
   belongs_to :user_one, class_name: "User"
   belongs_to :user_two, class_name: "User"
   validates :user_one_id, presence: true
   validates :user_two_id, presence: true

   def percent
     # match percent method will go here
   end
end

# user.rb
class User < ApplicationRecord
  has_many :matchables, 
            class_name: "Matchable",
            dependent: :destroy
  has_many :matches, through: :matchable, source: :match
end

Часть, в которой я не уверен, заключается в том, как должна быть настроена пользовательская модель с передачей внешнего ключа в matchable. Каков правильный способ сделать это? Любые предложения/советы приветствуются.


person helpmeplz    schedule 29.04.2017    source источник
comment
На самом деле это довольно сложная задача, поскольку пользователь может находиться либо в user_one_id, либо в user_two_id - stackoverflow.com/questions/37244283/   -  person max    schedule 30.04.2017
comment
Я думаю ты прав. Я не уверен, как подойти к этому.   -  person helpmeplz    schedule 30.04.2017