当前位置:  开发笔记 > 编程语言 > 正文

rails如果是object.nil?那么魔术''在观点中?

如何解决《rails如果是object.nil?那么魔术''在观点中?》经验,为你挑选了5个好方法。

这是其中之一,也许这么简单,我永远找不到它,因为其他人都已经知道了.

我有必须在我的视图中检查nil的对象所以我不会取消引用nil:

<%= if tax_payment.user; tax_payment.user.name; end %>

或者我可以做这个变种:

<%= tax_payment.user ? tax_payment.user.name : '' %>

所以这对大多数语言来说都没问题.但我觉得必须有一些闪亮的红宝石或铁杆我仍然缺少,如果这是我能做的最好的.



1> Sophie Alper..:

关于什么:

<%= tax_payment.user.name if tax_payment.user %>


我知道这将是一个头脑清醒,谢谢.

2> Toby Hede..:

你也可以试试新的Object.try语法,原谅双关语.

这是闪亮的新Rails 2.3:

tax_payment.try(:user).try(:name)



3> Antti Tarvai..:

Ruby社区对自动化这个成语给予了极大的关注.这些是我所知道的解决方案:

试试 Ruby on Rails

另一个尝试

andand

更安全的andand

核心:: ERGO

送与 - 默认

也许

_?

如果 - 不为零

乌龟!

Groovy风格的method_

做或拒收

最着名的可能是Rails中的try方法.但是,它受到了一些 批评.

无论如何,我认为Ben的解决方案是完全足够的.



4> KenB..:

我总是喜欢这种方法:

模型:

class TaxPayment < ActiveRecord::Base
  belongs_to :user
  delegate :name, :to=>:user, :prefix=>true, :allow_nil=>true
end

视图:

<%= tax_payment.user_name %>

http://apidock.com/rails/Module/delegate



5> Jörg W Mitta..:

有关更全面的解决方案,您可以查看介绍空对象重构.这种重构的基本机制是,不是nil客户端代码中检查,而是通过引入特定于上下文的null对象并返回它来确保提供者从不首先生成a .nil

因此,返回一个空字符串,一个空数组,一个空哈希或一个特殊的空客户或空用户或其他东西,而不仅仅是nil,然后你将永远不需要检查nil.

所以,在你的情况下你会有类似的东西

class NullUser < User
    def name
        return ''
    end
end

但是,在Ruby中实际上有另一种非常优雅的方式来实现引入Null对象重构:实际上你不需要引入 Null对象,因为nil已经是一个对象了!因此,你可以使用猴子补丁nil来表现为NullUser - 然而,在这种情况下,所有关于猴子修补的常见警告和陷阱都会更加强烈,因为nil无声吞咽NoMethodError或类似的东西可能会完全破坏你的调试体验和使它真的很难追查案件,其中有一个nil是不应该存在(而不是一个nil用作空对象).

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有