Мои модели:
class Team < ApplicationRecord
belongs_to :objective
belongs_to :consultancy
has_one :seminar, :through => :consultancy
belongs_to :consultant, class_name: "Student"
has_and_belongs_to_many :users
end
class User < ApplicationRecord
has_and_belongs_to_many :teams
end
Моя функция:
def find_placement(student)
team = @consultancy.teams.detect{|x| x.has_room && student.objective_students.find_by(:objective => x.objective).obj_ready_and_willing?}
team.users << student if team
return team
end
И это ошибка, которую я сейчас получаю:
PG::ForeignKeyViolation: ERROR: insert or update on table "teams_users" violates foreign key constraint "fk_rails_8299e376e9" DETAIL: Key (team_id)=(3396) is not present in table "teams". : INSERT INTO "teams_users" ("user_id", "team_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4)
«Если вставлена новая строка, проверьте DataID и Address: если они содержат ненулевое значение (скажем, 27856), то проверьте Table1 для DataID˙ и Table2 для Address. Если в этих таблицах такого значения нет, верните ошибка."
Если я правильно понимаю этот абзац, моя функция - попытаться включить ученика в команду, которой не существует. Но разве часть кода в моем коде не заботится об этом? Если нет, то как лучше вставить ученика в команду, но только если команда уже существует.
Заранее спасибо за любые идеи.
Всего 1 ответ
valid?
Метод не проверяет постоянство базы данных, поэтому он может вам понадобиться или не понадобиться. Возможно, вы захотите убедиться, что модель team
сохраняется и не удаляется из таблицы команд. Чтобы быть в безопасности, вы можете проверить оба. ActiveRecord#persisted?
метод:
def find_placement(student)
if team = @consultancy.teams.detect{|x| x.has_room && student.objective_students.find_by(:objective => x.objective).obj_ready_and_willing?}
team.users << student if team.valid? && team.persisted?
end
team
end