Rails - 解析嵌套表单关联错误

时间:2017-07-19 17:26:05

标签: ruby-on-rails ruby ruby-on-rails-5

我正在尝试使用索引键对象显示关联错误,格式如下:

:errors=>{
  :questions=>{
     0=>{:title=>"can't be blank"},
     1=>{:title=>"can't be blank"}
  }
}

Rails 5提供了一种显示错误索引的方法,但使用的格式如下:

questions[0].title, 
questions[1].title

我的解决方案有点讨厌,正在解析像这样的错误响应

def parse_errors
  {
    errors: {
      questions: @post.questions.enum_for(:each_with_index).collect { |question, index|
        {
           index => question.errors.messages
        } unless question.valid?
      }.inject({}, :merge).transform_values {|v| v.transform_values &:first }
   }.merge!(@post.errors.messages)
  }
 end

我得到了

{
  :errors=>{
    :questions=>{
      0=>{
        :title=>"can't be blank"
      },
      1=>{
        :title=>"can't be blank"
      }
    }, 
    :"questions.title"=>["can't be blank"], 
    :title=>["can't be blank"]
  }
}

但我希望以下结果省略默认问题错误消息:“questions.title”=> [“不能为空”], 像这样:

{
  :errors=>{
    :questions=>{
      0=>{
        :title=>"can't be blank"
      },
      1=>{
        :title=>"can't be blank"
      }
    },  
    :title=>["can't be blank"]
  }
}

那么,有没有办法清理这段代码,以便为预期格式的帖子和问题显示错误?

感谢。

1 个答案:

答案 0 :(得分:0)

  

解析嵌套表单关联错误

不确定,但您可以通过以下方式删除默认错误消息:

  1. 使用self.errors.clear清除所有错误。
  2. 使用self.errors.add将所有错误消息放回正确/所需的位置。