gpt4 book ai didi

ruby-on-rails - Ruby on Rails具有ActiveRecord错误处理的怪异行为

转载 作者:行者123 更新时间:2023-12-03 08:36:30 26 4
gpt4 key购买 nike

谁能解释为什么会这样?

mybox:$ ruby script/console
Loading development environment (Rails 2.3.5)
>> foo = Foo.new
=> #<Foo id: nil, customer_id: nil, created_at: nil, updated_at: nil>
>> bar = Bar.new
=> #<Bar id: nil, bundle_id: nil, alias: nil, real: nil, active: true, list_type: 0, body_record_active: false, created_at: nil, updated_at: nil>
>> bar.save
=> false
>> bar.errors.each_full { |msg| puts msg }
Real can't be blank
Real You must supply a valid email
=> ["Real can't be blank", "Real You must supply a valid email"]

到目前为止,这是完美的,这就是我希望读取的错误消息。现在了解更多:
>> foo.bars << bar
=> [#<Bar id: nil, bundle_id: nil, alias: nil, real: nil, active: true, list_type: 0, body_record_active: false, created_at: nil, updated_at: nil>]
>> foo.save
=> false
>> foo.errors.to_xml
=> "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>\n <error>Bars is invalid</error>\n</errors>\n"

那是我不知道的。与上面显示的错误消息相比,[为什么我不能得到Bars无效],[“Real不能为空”,“Real必须提供有效的电子邮件”]等。

我的 Controller 只是有一个带有以下内容的response_to方法:
 format.xml  { render :xml => @foo.errors, :status => :unprocessable_entity }

我该如何输出真正的错误消息,以便用户对自己的错误做些了解?如何在 Controller 中编写render方法以显示所有适当的错误消息?

最佳答案

这是因为bar的错误存储在bar对象中。要获取这些错误,您必须执行以下操作:

foo.bar.each do |bar|
bar.errors.each_full { |msg| puts msg }
end

这一切对我来说都是令人费解的,但是我还没有找到将所有错误汇总到一个列表中的最佳方法(除了自己处理之外)。我了解其背后的原因(因为每个对象应该只知道它自己的错误)。我通常要做的是扩展 ActiveRecord::Errors并创建一个新的 each_full_with_associations函数,将它们全部返回。

当您在带有嵌套字段的表单上看到它时,这一切都是有意义的。在这种情况下,错误会正确显示,并且一切正常。

关于ruby-on-rails - Ruby on Rails具有ActiveRecord错误处理的怪异行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2687621/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com