ActiveRecord 验证在使用 Rails 5.2 播种时失败

ActiveRecord validation fails at seeding with Rails 5.2

我正在创建一个工作应用程序的新实例,并尝试为用户模型设定种子。一项自定义验证在播种时失败,但在正常操作中工作正常:

用户模型通过 HABTM 关系链接到组模型。一个用户必须至少属于组Everyone,其中id为0。

user.rb

class User < ApplicationRecord

# Validations
  validate :member_of_Everyone_group

# Relations
  has_many :groups_users
  has_many :groups, through: :groups_users

private 

  def member_of_Everyone_group
    errors.add(:base, :EveryoneMembershipMissing) unless self.group_ids.include? 0
  end

end

group.rb

class Group < ApplicationRecord

# Relations
  has_many :groups_users
  has_many :users, through: :groups_users

end

groups_user.rb

class GroupsUser < ApplicationRecord

### Validations
  validates :is_principal, uniqueness: { scope: [:group_id, :user_id] }
  validates :group_id, uniqueness: { scope: :user_id }

  belongs_to :users
  belongs_to :groups

end

播种时出现以下错误:

rails aborted! NameError: uninitialized constant User::Groups

app/models/user.rb:174:in `member_of_Everyone_group'

你能帮我看看哪里出了问题吗?

非常感谢!

belongs_to 应该使用型号名称的单数形式,而不是复数形式。在您的 GroupsUser 模型中,将这些行更改为:

belongs_to :user
belongs_to :group

一个用户has_many组,但是在groups_user.rb用户范围内有group_id的唯一性验证。这似乎是矛盾的。