gpt4 book ai didi

ruby-on-rails - belongs_to 关联的验证错误消息变得容易

转载 作者:行者123 更新时间:2023-12-04 00:37:44 26 4
gpt4 key购买 nike

我的应用程序中有相当多的 belongs_to 关联,其中一些是可选的(即关联可以为 nil),一些是强制性的(关联必须是有效的父记录。

我最初的方法是使用我自己的验证方法来验证给定的 id(这里是强制关联)

belongs_to :category

validates :category_id,
presence: true

validate given_category_exists

def given_category_exists
if category_id.present?
errors.add( :category_id, 'must be present' ) \
Category.exists?( category_id )
end
end

然后我发现如果我对关联使用存在性检查,Rails 会为我执行此操作,因此我可以省略自己的验证方法:

belongs_to :category

validates :category,
presence: true

但是现在,生成的错误消息会简单地说明:Category can't be blank。这里的问题是:(1)我可以提供更有用的信息吗? (2) 如何插入我自己的属性翻译? Category 是 validates 方法生成的默认标签,can't be blank 是 :blank 的默认错误文本。

另一个问题:表单中的相关输入字段未标记为“field_with_errors”,因为该字段是用属性名称而不是关联名称标识的。

使用标准的处理方式,我将在我的 I18n 翻译文件中添加一个附加属性,用于关联 category 的名称,并为标准消息添加一个替换:

en:
activerecord:
models:
attributes:
my_model:
category_id: 'This Category'
category: 'This Category'

errors:
models:
my_model:
attributes:
category:
blank: 'must be specified.'

很多行可能会出错。而且我不喜欢添加实际上不是属性而是关联名称的肤浅属性的想法。

有没有更简单的方法?

最佳答案

帖子很旧,但我仍然会写我的解决方案。 Rails 5 有一个 required 错误键,您可以使用它来覆盖那些属于关联的验证消息:

class MyModel < ApplicationRecord
belongs_to :category
end

请注意,您实际上不需要在此处指定验证规则(validates :category, presence: true)。为了自定义您的消息,只需使用 required 键:

en:
activerecord:
errors:
models:
my_model:
attributes:
category:
required: "The category must be specified."

关于ruby-on-rails - belongs_to 关联的验证错误消息变得容易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39019220/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com