Наследование в одной таблице + отношения - PullRequest
0 голосов
/ 15 октября 2019

Я создаю приложение rails 5 (своего рода поиск работы, который связывает рекрутеров с кандидатами). Вот часть конфигурации моей модели:

class User < ActiveRecord::Base
  has_and_belongs_to_many :tag
end

class Applicant < User
  has_many :experience
  has_many :match
end

class Recruiter < User
  has_one :company
  has_many :offer
end

class Experience < ActiveRecord::Base
  belongs_to :applicant, :foreign_key => "user_id"
  has_one :company
end

И это выдержки из моего файла схемы:

create_table "users", force: :cascade do |t|
    t.string "type", null: false
    t.string "login", limit: 40, null: false
    t.string "password", limit: 500, null: false
    t.bigint "company_id"

    t.index ["company_id"], name: "index_users_on_company_id"
    t.index ["login"], name: "index_users_on_login", unique: true
  end

create_table "experiences", force: :cascade do |t|
    t.string "job_name", limit: 100, null: false
    t.bigint "company_id"
    t.bigint "user_id", null: false
    t.text "description"
    t.index ["company_id"], name: "index_experiences_on_company_id"
    t.index ["job_name"], name: "index_experiences_on_job_name"
    t.index ["user_id"], name: "index_experiences_on_user_id"
  end

add_foreign_key "users", "companies"
add_foreign_key "experiences", "companies"
add_foreign_key "experiences", "users"

Опыт присоединен к модели Заявитель через пользователя таблицы (которыйсодержат поле типа для STI), поэтому я указал "foreign_key => 'user_id'" в модели опыта.

Моя проблема заключается в том, что, когда я пытаюсь получить доступ при первом опыте кандидата, я получаюэта ошибка:

PG :: UndefinedColumn: ОШИБКА: столбец experience.applicant_id не существует ЛИНИЯ 1: ВЫБЕРИТЕ "опыты". * ИЗ "переживаний" ГДЕ "переживает ...

Надеюсь, вы мне поможете ... Спасибо!

1 Ответ

1 голос
/ 15 октября 2019

Как указано в документах :

По соглашению Rails предполагает, что столбец, используемый для хранения внешнего ключа в другой модели, является именем этой модели сдобавлен суффикс _id.

Попробуйте выполнить:

class Applicant < User
  has_many :experiences, foreign_key: :user_id
  has_many :matches
end

Обратите внимание, что во множественном числе принято использовать ассоциацию has_many.

Кстати, для меня не очевидно, почему вы используете ИППП, но я уверен, что есть веские причины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...