gpt4 book ai didi

ruby-on-rails-3 - Rails 零错误 - 有什么办法可以阻止它们?

转载 作者:行者123 更新时间:2023-12-04 05:10:54 24 4
gpt4 key购买 nike

在过去的 6 个月里,我一直在学习 Rails。我觉得很棒!

但是,我的应用程序得到的 99% 的错误都是零错误。我要么试图显示一个为零的字段,要么一个外键指向已删除的记录。

我在很多地方都有这种类型的代码:

        <% if location.parent != nil %>
<td><%= location.parent.name %></td>
<% else %>
<td></td>
<% end %>

<% if location.client_id != nil %>
<td><%= location.client.client_name %></td>
<% else %>
<td></td>
<% end %>

我真的希望 Rails 在该字段为零时只显示一个空白!或者,设置有错误的闪光灯并仍然显示页面。相反,页面炸弹。在 Heroku 上,您会收到“抱歉,出了点问题......”

有什么办法可以更好地处理空白字段?有没有更好的方法来编码上面的代码?是否有一些我不知道的 Rails 设置?有没有 gem 可以处理这些类型的错误?

最佳答案

你真的应该放一些 foreign key constraintsafter_destroy methods on your associations .这将阻止您的数据库进入不一致的状态。

但是除了重构之外,您还应该查看 ActiveSupport 以及它对 ruby​​ 所做的各种添加。见 http://guides.rubyonrails.org/active_support_core_extensions.html .

在我认为对您有帮助的任何对象上都可以使用三种方法:

  • blank? - 如果对象为 nil、empty?、false 和其他条件,则返回 true。见 the documentation为了更好的解释。
  • present? - 如果对象不为零,不为空,则返回真?或真实。见 the documentation为了更好的解释。
  • try(:foo) - 尝试调用方法 foo在对象上,如果对象为 nil,则返回 nil。见 the documentation为了更好的解释。

  • 有了这个,您的示例代码可能是:
    <td><%= location.parent.try(:name) %></td>
    <td><%= location.parent.try(:client_name) %></td>

    我真的建议你看看为什么你期望一个对象不为零。 Foreign key constraints在您的迁移和 after_destroy hooks for your associations 中将对此有所帮助。

    关于ruby-on-rails-3 - Rails 零错误 - 有什么办法可以阻止它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14926616/

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