0

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

2 回答 2

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
于 2012-07-17T00:09:00.420 回答
1

堆叠它们!

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

或者阅读这篇上一篇文章,以一种非常丰富多彩的方式来定制错误:

Rails 验证错误消息:每个字段仅显示一条错误消息

于 2012-07-17T00:09:37.703 回答