我正在尝试将数据播种到具有对另一个表的引用的表中(通过使用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)
我尝试了不同的方法来编写种子,但是没有任何效果。
在运行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中,每当我们定义一个Emirates_to关联时,它就是 要求此后默认存在关联记录 改变。
可能我错过了一些东西,或者不知道种子是如何工作的。 我正在创建新的用户和角色,然后将数据播种到user_roles表中,但是无论如何我都会遇到此错误。
如何实现将数据播种到表user_roles中?
感谢您的回复。