处理视图中的 nil(即 @post.author.name 中的 nil 作者)
我想显示帖子作者的姓名; <% @post.author.name %>
有效,除非作者为零。所以我要么使用unless @post.author.nil?
,要么添加一个author_name方法来检查nil,如<% @post.author_name %>
。我尽量避免后者。
问题是我可能需要根据是否有值来添加/删除单词。例如,如果我简单地显示 nil,则内容为“Posted on 1/2/3 by”。如果作者为零,我需要删除“by”。
I want to show a post author's name; <% @post.author.name %>
works unless author is nil. So I either use unless @post.author.nil?
or add a author_name method that checks for nil as in <% @post.author_name %>
. The latter I try to avoid.
The problem is that I may need to add/remove words depending on whether there is a value or not. For instance, "Posted on 1/2/3 by " would be the content if I simply display nil. I need to remove the " by " if author is nil.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
空对象模式是避免这种情况的一种方法。在你的课堂上:
这样你无论如何都会得到一个空的作者。但是,由于有时当您确实期望
nil
时,您实际上并不希望拥有一个空对象,因此您可以使用某种类型的演示者。另一种方法是使用
try
,如@post.author.try(:name)
(如果您能习惯的话)。Null object pattern is one way to avoid this. In your class:
This way you will get an empty author no matter what. However, since you don't actually want to have an empty object sometimes when you do expect
nil
, you can use presenter of some kind.Another way is using
try
, as in@post.author.try(:name)
, if you can get used to that.您可以使用
try
:它将尝试如果它非零,则调用
@post.author
上的name
方法。否则将返回 nil,并且不会引发异常。回答你的第二个问题:原则上,以下内容没有任何问题:
或者
但是如果这是一个重复出现的模式,您可能需要为其编写一个辅助方法。
You can use
try
:It will attempt to call the
name
method on@post.author
if it is non-nil. Otherwise it will return nil, and no exception will be raised.Answer to your second question: In principle there is nothing wrong with the following:
or
But if this is a recurring pattern, you might want to write a helper method for it.
编写一个方法,它接受任何变量并首先检查它是否为空,如果不是则显示它。那么你只需要编写一个方法。
Write a method which accepts any variable and checks to see if it is nuil first, and if it is not displays it. Then you only have to write one method.
我发现你的问题很有趣,因为我经常遇到类似的情况,所以我想我应该尝试制作我的第一个 Rails 插件。
恐怕我还没有进行任何测试,但你可以尝试一下 http://github.com /reubenmallaby/acts_as_nothing (我使用的是 Ruby 1.9.1,所以如果您在评论中或在 Github 上遇到任何问题,请告诉我!)
I found your question interesting as I have often come across similar situations, so I thought I'd try out making my first Rails plugin.
I'm afraid I haven't put in any tests yet but you can try it out http://github.com/reubenmallaby/acts_as_nothing (I'm using Ruby 1.9.1 so let me know if you get any problems in the comments or on Github!)