В приложении Rails 6 у меня есть модель Course
с атрибутом массива attendee_ids
, как показано на схеме ниже.
create_table "courses", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
t.uuid "attendee_ids", null: false, array: true
t.index ["attendee_ids"], name: "index_lcourses_on_attendee_ids", using: :gin
end
В модели у меня есть ассоциации, определенные как
class Course < ApplicationRecord
has_many :attendees, class_name: 'User',
primary_key: 'attendee_ids',
foreign_key: 'id'
end
Ассоциация прекрасно работает при чтении для БД. Однако, независимо от того, что я пытаюсь сделать, я не могу сохранить attendee_ids
при создании нового Course
.
attendee = User.first
=> #<User id: "6936291d-f7d8-409f-a18b-83cab8c3de0b" ...>
course = Course.new
=> #<Course id: nil, attendee_ids: nil>
course.attendees = [attendee]
=> #<ActiveRecord::Associations::CollectionProxy [#<User id: "6936291d-f7d8-409f-a18b-83cab8c3de0b">]>
course
=> #<Course id: nil, attendee_ids: nil>
course.attendee_ids = [attendee.id]
=> #<ActiveRecord::Associations::CollectionProxy [#<User id: "6936291d-f7d8-409f-a18b-83cab8c3de0b">]>
course
=> #<Course id: nil, attendee_ids: nil>
Назначение работает, если я удаляю ассоциацию has_many
.
attendee = User.first
=> #<User id: "6936291d-f7d8-409f-a18b-83cab8c3de0b" ...>
course = Course.new
=> #<Course id: nil, attendee_ids: nil>
course.attendee_ids = [attendee.id]
=> #<ActiveRecord::Associations::CollectionProxy [#<User id: "6936291d-f7d8-409f-a18b-83cab8c3de0b">]>
course
=> #<Course id: nil, attendee_ids: ["6936291d-f7d8-409f-a18b-83cab8c3de0b">
Я что-то здесь упускаю?
PS - Кому интересно, я не использую встроенную has_many
ассоциацию для целей аудита, которые выходят за рамки этоговыпуск.