Ruby on rails 3 Rails无错误-有什么方法可以阻止它们?
在过去的6个月里,我一直在学习Rails。我觉得它很棒 但是,我的应用程序99%的错误都是零错误。我试图显示一个为零的字段,或者外键指向已删除的记录 我在很多地方都有这种类型的代码:Ruby on rails 3 Rails无错误-有什么方法可以阻止它们?,ruby-on-rails-3,Ruby On Rails 3,在过去的6个月里,我一直在学习Rails。我觉得它很棒 但是,我的应用程序99%的错误都是零错误。我试图显示一个为零的字段,或者外键指向已删除的记录 我在很多地方都有这种类型的代码: <% if location.parent != nil %> <td><%= location.parent.name %></td> <% else %> <td>&l
<% 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上,你会听到“对不起,出了点问题……”
有没有办法更好地处理空白字段?有没有更好的方法来编写上述代码?有我不知道的轨道设置吗?是否有一个gem来处理这些类型的错误?不是Rails修复程序,但是您可以使用面向对象设计的NullObject模式来重构代码,以不同的方式处理“nil”。该模式基本上意味着为对象创建一个null/nil类,该对象在为nil时进行处理。它有一些缺点:需要维护一个额外的类,当您添加可能为nil的新方法时,必须记住编辑null类。好处是它将条件句移出了视图 这里有一篇关于这个主题的好博文:
另一个建议是将条件句从您的视图中移到helpers中。助手是包含视图逻辑的简单模块。我在视图中遇到了视图及其所有逻辑,这使得视图代码很快变得一团糟。您真的应该放置一些和。这将阻止数据库进入不一致状态 但除了重构之外,您还应该检查ActiveSupport及其对ruby的各种添加。看 有三种方法可用于任何对象,我认为对您有帮助:
-如果对象为nil、empty、false和其他条件,则返回true。请参阅以获得更好的解释blank?
-如果对象不是nil,不是空的,则返回true?或者是真的。请参阅以获得更好的解释present?
-尝试调用对象上的方法try(:foo)
,如果对象为nil,则返回nil。请参阅以获得更好的解释foo
<td><%= location.parent.try(:name) %></td>
<td><%= location.parent.try(:client_name) %></td>
我真的建议你看看为什么你期望一个对象不是零。这将有助于您的迁移。谢谢-我将进一步调查您的建议。我认为您还应该解释安全导航操作员的好处。与
相反,请尝试公正的评论-尽管当我回答这个问题时,ruby 2.3没有发布(发布前两年!)。TBH我个人尽量避免使用try
或&.
,因为这会导致代码没有足够的保护条款或忽略德米特定律。