有一点问题是rends rails错误。主要问题是在视图上错误显示数组输出而不是连接在一起(用户友好)。我可以在视图中添加“join”方法,这将在具有多个错误的属性上正常工作。虽然属性自然只包含1个错误,但这会破坏。
所以我当前正试图让错误加入控制器,这样如果属性上出现多个错误,它看起来会很漂亮。试图在视图中添加.join方法是行不通的,因为在有1个错误的实例中它会中断(因为你不能在字符串上调用join方法)
任何帮助如何在控制器中完成这项工作都会很棒。关于处理这个问题的另一种方式的任何建议也很棒。 (根据我试图在控制器中修改/加入数组错误的逻辑)
控制器:
if @person.errors.blank? && @person.save
flash[:info] = "Your profile has been successfully updated."
redirect_to profile_url(@person) and return
else
if @person.errors.on(:first_name).is_a?(Array)
@person.errors.on(:first_name).join
end
flash[:warning] = "Sorry, there was a problem saving your profile. Please try again."
render :edit
end
查看:
%li
= label(:person, :first_name, "First Name")
= f.text_field :first_name
- if @person.errors[:first_name].present?
%span{:style => "color: red; margin-left: 180px;"}= @person.errors[:first_name]
答案 0 :(得分:1)
您可以简单地使用to_a
方法。它在数组中转换字符串,它对数组没有任何作用。
您应该像这里一样创建自定义验证器:http://guides.rubyonrails.org/active_record_validations_callbacks.html#performing-custom-validations。
之后,您可以像这样重构代码
if @person.save
flash[:info] = "Your profile has been successfully updated."
redirect_to profile_url(@person)
else
@person.errors[:first_name] = @person.errors.on(:first_name).to_a.join
flash[:warning] = "Sorry, there was a problem saving your profile. Please try again."
render :edit
end
答案 1 :(得分:1)
堆叠em!
if @person.errors.present?
@person.errors.each do |err|
= err
或者以非常丰富多彩的方式阅读上一篇文章,了解自定义错误:
Rails validation error messages: Displaying only one error message per field