Rails 4 - 从关联模型存在的错误消息中删除属性名称

Rails 4 - Remove attribute name from error message for associated model presence

我有两个模型 user_itemuser_item_images

user_item.rb

has_many :user_item_images, dependent: :destroy
validates :user_item_images, presence: { message: "You must include a picture" }

user_item_images.rb

belongs_to :user_item

我有一个只有一个 user_item_image 字段的嵌套表单,即 :picture。当我提交一个空表格时,我收到这条消息

User item images You must include a picture

如何才能让消息显示

You must include a picture

我不知道如何编辑 en.yml 文件,因为错误是存在另一个模型而不是模型的属性。

我看了 here 但答案太宽泛,我想我需要自定义验证。

改为创建自定义验证:

has_many :user_item_images, dependent: :destroy
validate :has_a_picture

private

def has_a_picture
  errors.add(:base, 'You must include a picture') if user_item_images.none?
end 

为此,在您的 user_item_images 模型中,您需要: validates :picture, presence: true 您可能还想查看是否有数据建模问题需要解决。无论如何,您当前的验证仅验证关联存在。因此,当您提交带有空图片字段的 user_item_images 表单时,失败的验证是您的 user_item 模型中的验证。与其尝试更改关联存在验证错误消息的内容,不如为 user_item_images 中的图片列添加验证。这样如果图片是空的,它会提高 'You must include a picture'。

我还会评论说,在 user_item 模型上进行存在验证 :user_item_images 不是必需的,这可能表明您需要解决更大的数据建模问题。

无需编写额外的代码。您应该使用内置于 I18n 中的 Rails' 来自定义 ActiveRecord 错误消息。

里面config/locales/en.yml

en:
  activerecord:
    errors:
      models:
        user_item:
          attributes:
            user_item_images:
              presence: "You must include a picture"