2014-09-25 57 views
1

我仍然努力得到我的验证错误消息显示没有出现在它的模型的名称,我有一个嵌套的模型AnimalImage,我正在执行验证是否提交了一个文件。模型名称出现在我的验证错误 - 导轨

def limit_num_of_images 
    if image.size < 1 
    errors.add(:base, "Please add an image") 
    ap(errors.inspect) 
    end 
end 

我在这种情况下得到的错误是

Animal images base Please add an image 

所有我想要展示的是

Please add an image 

在控制台展望errors.inspect的输出

"#<ActiveModel::Errors:0x007fa0192d1890 @base=#<AnimalImage id: nil, animal_id: nil, image: nil, created_at: nil, updated_at: nil>, @messages={:base=>[\"Please add an image\"]}>" 

所以这些消息是在一个哈希?如果是这种情况,我需要找到一种不显示密钥的方式?

最后,在我看来,我正在输出错误信息,像这样

<% @animal.errors.full_messages.each do |msg| %> 
    <li><%= msg %></li> 
<% end %> 

因此,作为一个快速解决我创建了一个帮手,只是剔除了文本的第一部分,但这种感觉太哈克和我想知道如何使用Rails做正确

def error_edit(message) 
    msg = message 
    msg.gsub('Animal images base', ' ') 
end 

// View 
<% @animal.errors.full_messages.each do |msg| %> 
    <li><%= error_edit(msg) %></li> 
<% end %> 

回答

1

我认为这会为你工作

class Animal < ActiveRecord::Base 
    validate do |animal| 
    animal.errors[:base] << "Please add an image" if animal.image.size < 1 
    end 
end 

我也会建议你看看这个链接http://api.rubyonrails.org/classes/ActiveModel/Errors.html#method-i-add

将消息添加到属性的错误消息。

你正在做什么是添加上称为基的属性,这显然不是你想有

更新什么消息::基地]从轨3.您应该使用错误移除add_to_base方法代替< <“错误”。

+0

我得到一个未定义的方法add_to_base你的答案,但生病的样子进入链接你提供多一点 – Richlewis 2014-09-25 10:39:05

+0

其轨道版本。 。oohhh我的坏,检查更新 – aelor 2014-09-25 10:40:48

+0

哈哈,我不知道这是怎么回事,仍然输出相同的错误信息,因为在问题...确定生病了在时间 – Richlewis 2014-09-25 10:47:02

2

我在我的控制器中有同样的问题。我知道它不是一个更好的解决方案,但我相信它会给你一个想法。

,请不要使用

errors.add(:base, "Please add an image") 

用户这个

errors.add(:attribute, "Please add an image") 

<% @animal.errors.each do |key,value| %> 
    <li><%= "#{key.to_s.titleize} #{value}".html_safe %></li> 
<% end %>