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'
- 在正常操作中,此验证行为正确。
- 在 rails 控制台中,我可以检查语句
group_ids.include? 0
是否也正常工作
你能帮我看看哪里出了问题吗?
非常感谢!
belongs_to
应该使用型号名称的单数形式,而不是复数形式。在您的 GroupsUser
模型中,将这些行更改为:
belongs_to :user
belongs_to :group
一个用户has_many
组,但是在groups_user.rb
用户范围内有group_id
的唯一性验证。这似乎是矛盾的。
我正在创建一个工作应用程序的新实例,并尝试为用户模型设定种子。一项自定义验证在播种时失败,但在正常操作中工作正常:
用户模型通过 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'
- 在正常操作中,此验证行为正确。
- 在 rails 控制台中,我可以检查语句
group_ids.include? 0
是否也正常工作
你能帮我看看哪里出了问题吗?
非常感谢!
belongs_to
应该使用型号名称的单数形式,而不是复数形式。在您的 GroupsUser
模型中,将这些行更改为:
belongs_to :user
belongs_to :group
一个用户has_many
组,但是在groups_user.rb
用户范围内有group_id
的唯一性验证。这似乎是矛盾的。