2016-02-26 109 views
2

在Rails我能做到这一点,以获得完整的错误信息(包括属性的名称)Ruby on Rails的full_messages特定属性

book.errors.full_messages.each do |err| 
    puts err 
end 

我的问题是,我该怎么做同样的事情,但对于一个特定的属性?

我不能做到这一点:

book.errors[:title].full_messages 

至于现在这是我在做什么

book.errors[:title].each do |err| 
    puts " Title #{err}" 
end 

我很期待,如果有一个更好的办法

回答

2

要获取特定属性使用的完整错误消息full_messages_for

book.errors.full_messages_for(:title) 
+0

这!谢谢。没有想到'full_messages_for'确实存在 –

1

我认为这个策略是适当的。即使您指定了特定属性,errors方法也会始终返回数组,因为可能会有多个与单个属性关联的错误。如果book只有一个属性包含一个错误(可以说的:title属性),应该有这两种方法的输出之间没有区别:

book.errors.full_messages.each do |err| 
    "#{err}" 
end 

book.errors[:title].each do |err| 
    "#{err}" 
end 
+0

@infused,显然我没有足够的声望来评论你的答案,所以我会这样做:我没有意识到'full_messages_for(:title)'方法,它的输出和'errors [:title]'的输出有区别吗?快速测试它们,它们似乎输出相同的东西。 – John

+0

你的第一块会显示所有的错误信息,包括其他属性(例如:作者,描述等),我想要的只是标题。第二个块只会显示标题错误,但不会包含属性名称(“不能为空”而不是“标题不能为空”)。 @ infused的答案,'full_messages_for(:title)'与'errors [:title]'不同的是它是否添加属性名称(例如:“标题不能为空”) –

+0

@AgungSetiawan谢谢! – John