渲染连接数组以显示Rails错误

时间:2012-07-16 23:39:51

标签: ruby-on-rails

有一点问题是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]

2 个答案:

答案 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