【问题标题】:Rendering joined array to display Rails Errors渲染连接数组以显示 Rails 错误
【发布时间】:2012-07-16 23:39:50
【问题描述】:

在导致 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]

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    堆叠它们!

    if @person.errors.present?
      @person.errors.each do |err|
        = err
    

    或者阅读这篇以前的帖子,用一种非常丰富多彩的方式来自定义错误:

    Rails validation error messages: Displaying only one error message per field

    【讨论】:

      【解决方案2】:

      您可以简单地使用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
      

      【讨论】:

      • 感谢各位的帮助。我最终不得不在视图中进行调整,因为显然试图在控制器中传递这些条件是 rails 不喜欢的。不确定它是否与 Rails 2.3 有关。
      猜你喜欢
      • 1970-01-01
      • 2012-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-23
      • 2012-12-30
      相关资源
      最近更新 更多