Добавление связи один-ко-многим в моделях пространства имен - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь установить отношения «один ко многим» между двумя моделями пространства имен, и, несмотря на все мои усилия, не могу понять, в чем моя проблема.

Вот моя миграция:

class AddAssociations < ActiveRecord::Migration[5.1]
  def change
    add_belongs_to :admin_plans, :academy_courses, foreign_key: true, index: true
    add_reference :academy_courses, :admin_plans, foreign_key: true, index: true
  end
end

Admin::Plan модель:

class Admin::Plan < ApplicationRecord
   belongs_to :course, class_name: 'Academy::Course', optional: true, foreign_key: :academy_courses_id
end

Academy::Course модель:

class Academy::Course < ApplicationRecord
   has_many :plans, class_name: 'Admin::Plan, foreign_key: :admin_plans_id
end

Вот что происходит, когда я пытаюсь получить все планы курса:

irb(main):001:0> c = Academy::Course.new
=> #<Academy::Course id: nil, title: nil, description: nil, user_id: nil, created_at: nil, updated_at: nil, admin_user_plans_id: nil, admin_plans_id: nil>
irb(main):004:0> c.plans
=> #<ActiveRecord::Associations::CollectionProxy []>
irb(main):005:0> c.plans.all
Traceback (most recent call last):
ActiveRecord::StatementInvalid (PG::UndefinedColumn: ERROR:  column admin_plans.course_id does not exist)
LINE 1: SELECT  "admin_plans".* FROM "admin_plans" WHERE "admin_plan...
                                                         ^
: SELECT  "admin_plans".* FROM "admin_plans" WHERE "admin_plans"."course_id" = $1 LIMIT $2
irb(main):007:0> Admin::Plan.last
  Admin::Plan Load (1.0ms)  SELECT  "admin_plans".* FROM "admin_plans" ORDER BY "admin_plans"."id" DESC LIMIT $1  [["LIMIT", 1]]
=> #<Admin::Plan id: 2, name: "MOMLab", price: 15, created_at: "2019-02-06 15:05:43", updated_at: "2019-02-07 07:12:26", academy_courses_id: nil>

Я был бы очень признателен за идеи о том, откуда исходит этот admin_plans.course_id, так как я объявил, что внешний ключ - :academy_courses_id.Спасибо:)

1 Ответ

0 голосов
/ 07 февраля 2019

После того, как я сильно ударился головой о стену и попробовал каждый метод в Google, я согласился на это:

Миграция:

   class AddCourseIdToAcademyLessons < ActiveRecord::Migration[5.1]
      def change
        add_column :admin_plans, :course_id, :integer, foreign_key: true, index: true
      end
    end

Admin :: Plan class:

class Admin::Plan < ApplicationRecord
  belongs_to :course, class_name: 'Academy::Course', optional: true
end

Академия :: Класс курса:

class Academy::Course < ApplicationRecord
  has_many :plans, class_name: 'Admin::Plan'
end
...