Как вставить данные в таблицы с отношением M: N в рельсах 5 - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь вставить данные в таблицу, в которой есть ссылки на другие таблицы (отношение 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?

Спасибо за ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...