ruby-on-rails - 使用 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'
- 在正常操作中,此验证正确执行。
- 在 Rails 控制台中,我可以检查该语句是否也可以
group_ids.include? 0
正常工作
你能帮我理解发生了什么问题吗?
非常感谢!
解决方案
belongs_to
应使用型号名称的单数形式,而不是复数形式。在您的GroupsUser
模型中,将这些行更改为:
belongs_to :user
belongs_to :group
推荐阅读
- reactjs - 反应,通过危险的SetInnerHTML在html中设置onClick
- javascript - 将全局样式应用到 Shadow DOM 的正确方法
- mysql - 涉及两个表的 SQL GROUP BY
- java - 从另一个类导入命令参数
- css - 带变量和乘法的 CSS Calc
- node.js - 如何在具有多个构建代理的服务器上使用 npm 缓存
- java - 关闭特定数据库并关闭连接的正确方法是什么?
- c# - Smartsheet API Resourcenotfooundexception 创建新工作表
- javascript - 包裹在 jQuery() 的 .text() 中的 jquery ajax 请求与 div 的 .text() 不同?
- ubuntu - JetBrains Rider 显示未安装 Mono