首页 > 解决方案 > 使用 Rails 5.2 播种时 ActiveRecord 验证失败

问题描述

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

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

用户.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

组.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

在播种时,会引发以下错误:

导轨中止!NameError: 未初始化的常量 User::Groups

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

你能帮我理解发生了什么问题吗?

非常感谢!

标签: ruby-on-railsactiverecord

解决方案


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

belongs_to :user
belongs_to :group

推荐阅读