2016-02-27 86 views
0

删除属性名称我有两个型号user_itemuser_item_images轨道4 - 从错误消息关联的模型存在

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嵌套形式。当我提交一个空的形式,我得到这个消息

用户的物品图像必须包括图片

如何让这个消息,而不是说

您必须包括一张图片

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

我看着here但得到的答复是太宽泛,我想我需要一个自定义的验证。

+0

[使用Rails完全定制的验证错误消息(的可能的复制http://stackoverflow.com/questions/808547/fully-custom-validation-error-message-with-rails ) – jeffdill2

+0

我不这么认为。该答案含糊不清,我相信我需要一个自定义验证来解决我的问题。 – user4584963

+0

是的,你需要自定义验证。检查出这个问题,这些2个答案 - http://stackoverflow.com/a/10635913/2266827,http://stackoverflow.com/a/33292528/2266827。他们会给你你需要的。 – jeffdill2

回答

2

创建自定义的验证,而不是:

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 
+0

我为什么还要包含'presence:...'? – user4584963

+0

其实我试过用你的[猴子补丁](http://stackoverflow.com/a/34347478/4584963)。它对'user_item_images'中的图片属性非常有效,但不适用于关联的存在。 – user4584963

+0

我得到这个错误信息'“未定义的方法'没有?'为:user_item_images:符号“'所以我改变了方法'...如果self.user_item_images.none?'。我唯一的问题是,我必须确定,除非有关联的'user_item_image',否则永远不能创建'user_item'。这个验证会完成这个吗? – user4584963

0

对于这一点,在你的user_item_images模型,你需要: validates :picture, presence: true 你也可以想看看你是否有数据建模问题需要解决。无论如何,您当前的验证只会验证该关联是否存在。因此,当您提交带有空白图片字段的user_item_images表单时,失败的验证是您的user_item模型中的验证。而不是尝试更改关联存在验证错误消息的内容,请为user_item_images中的图片列添加验证。这样,如果图片是空的,它会提出'你必须包含图片'。

我也会评论说具有存在验证:在user_item模型user_item_images不应该是必要的,可能表明,你需要解决一个更大的数据建模问题。

+0

我想你可能会对我的模型的设置感到困惑。除非有关联的'user_item_image',否则'user_item'不应该存在。我有消息“”你必须包含图片“”的原因是因为这是用户能够添加到“user_item_image”的唯一属性。 – user4584963

0

有没有必要写额外的代码。您应该使用内置I18n的Rails来自定义ActiveRecord错误消息。

内部config/locales/en.yml

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

你的建议没有奏效。有了这个更改,我仍然收到相同的错误消息,并且该属性名称仍然存在。 – user4584963