Как мне связать таблицу в rails с уже существующими таблицами

Я пишу плагин на Rails для Redmine (дипломная работа). Я хочу создать свою таблицу задач, у которой был бы свой id, при этом она содержала бы в себе некоторые необходимые мне данные из других таблиц, пытаюсь я это сделать через существующую таблицу задач issues. Мне нужен номер задачи, проект, юзер - которому назначена задача, трекер, статус, тема.

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

Моя модель

class Task < ActiveRecord::Base

  unlodable
  has_one :issue
  has_one :project, through: :issue
  has_one :traker, through: :issue
  has_one :assigned_to, through: :issue
  has_one :subject, through: :issue
  has_one :status, through: :issue

end

Мой файл миграции

class CreateTasks < ActiveRecord::Migration[5.2]
  def change
    create_table :tasks do |t|
      t.integer :issue_id
      t.string :issue_project
      t.string :issue_assigned_to
      t.string :issue_status
      t.string :issue_subject
    end
  end
end

Таблица issues в схеме Redmine

create_table "issues", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci", force: :cascade do |t|
    t.integer "tracker_id", null: false
    t.integer "project_id", null: false
    t.string "subject", default: "", null: false
    t.text "description", limit: 4294967295
    t.date "due_date"
    t.integer "category_id"
    t.integer "status_id", null: false
    t.integer "assigned_to_id"
    t.integer "priority_id", null: false
    t.integer "fixed_version_id"
    t.integer "author_id", null: false
    t.integer "lock_version", default: 0, null: false
    t.timestamp "created_on"
    t.timestamp "updated_on"
    t.date "start_date"
    t.integer "done_ratio", default: 0, null: false
    t.float "estimated_hours"
    t.integer "parent_id"
    t.integer "root_id"
    t.integer "lft"
    t.integer "rgt"
    t.boolean "is_private", default: false, null: false
    t.datetime "closed_on"
    t.index ["assigned_to_id"], name: "index_issues_on_assigned_to_id"
    t.index ["author_id"], name: "index_issues_on_author_id"
    t.index ["category_id"], name: "index_issues_on_category_id"
    t.index ["created_on"], name: "index_issues_on_created_on"
    t.index ["fixed_version_id"], name: "index_issues_on_fixed_version_id"
    t.index ["parent_id"], name: "index_issues_on_parent_id"
    t.index ["priority_id"], name: "index_issues_on_priority_id"
    t.index ["project_id"], name: "issues_project_id"
    t.index ["root_id", "lft", "rgt"], name: "index_issues_on_root_id_and_lft_and_rgt"
    t.index ["status_id"], name: "index_issues_on_status_id"
    t.index ["tracker_id"], name: "index_issues_on_tracker_id"
  end

Последнее изменение в файле миграции

class CreateTasks < ActiveRecord::Migration[5.2]
  create_join_table :tasks, :issues, :projects, :trackers, :status do |t|
    t.integer :issue_id
    t.string :project_name
    t.string :issue_assigned_to_id
    t.string :traker_name
    t.string :status_name
    t.string :issue_subject
  end
end

Ответы (1 шт):

Автор решения: Василиса

Таблица tasks совершенно правильно хранит issue_id. Это говорит о том, что связь должна быть belongs_to :issue, а не has_one. Все остальные поля в tasks не нужны, эти данные вы можете получить через связи

class CreateTasks < ActiveRecord::Migration[5.2]
  def change
    create_table :tasks do |t|
      t.integer :issue_id
    end
  end
end

class Task < ActiveRecord::Base
  unlodable
  belongs_to :issue
  has_one :project, through: :issue
  has_one :traker, through: :issue
  has_one :assigned_to, through: :issue
  has_one :subject, through: :issue
  has_one :status, through: :issue

end
→ Ссылка