如何在Rails 5中将数据播种到具有M:N关系的表中

时间:2019-07-10 14:44:31

标签: postgresql ruby-on-rails-5

我正在尝试将数据播种到具有对另一个表的引用的表中(通过使用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中?

感谢您的回复。

0 个答案:

没有答案