Я пытаюсь вставить данные в таблицу, в которой есть ссылки на другие таблицы (отношение M: N используется через)
Миграции:
def change
create_table :users do |t|
t.string :first_name
t.string :last_name
t.string :username, index: { unique: true }
t.string :email, index: { unique: true }
t.string :password_digest
t.timestamps
end
end
end
class CreateRoles < ActiveRecord::Migration[5.2]
def change
create_table :roles do |t|
t.string :name, index: { unique: true }
end
end
end
class CreateUserRoles < ActiveRecord::Migration[5.2]
def change
create_table :user_roles do |t|
t.references :user, foreign_key: true, index: true
t.references :role, foreign_key: true, index: true
t.timestamps
end
end
end
Модели:
class User < ApplicationRecord
has_many :user_roles
has_many :roles, through: :user_roles
end
class Role < ApplicationRecord
has_many :user_roles
has_many :users, through: :user_roles
validates :name, uniqueness: true
end
class UserRoles < ApplicationRecord
belongs_to :user
belongs_to :user_role
end
seed.rb
john = User.create!(first_name: "John", last_name: "Doe", username: "john.doe", email: "john.doe@gmail.com", password: BCrypt::Password.create("john.doe"))
admin = Role.create!(name: "admin")
UserRoles.create!(user_id: john, role_id: admin)
Я пробовал разные подходы, как написать seed, но ничего не работает.
После запуска команды rails rails db:seed
Я получаю следующую ошибку: ActiveRecord::RecordInvalid: Validation failed: User must exist, User role must exist
Я нашел эту статью: https://blog.bigbinary.com/2016/02/15/rails-5-makes-belong-to-association-required-by-default.html. Он говорит:
В Rails 5 всякий раз, когда мы определяем ассоциацию own_to, это
после этого требуется наличие соответствующей записи по умолчанию
изменить.
Возможно, я что-то пропустил или не знаю, как именно работают семена.
Я создаю нового пользователя и роль, а затем помещаю данные в таблицу user_roles, но в любом случае получаю эту ошибку.
Как мне получить данные для заполнения в таблицу user_roles?
Спасибо за ответ.