【发布时间】:2014-02-26 14:18:53
【问题描述】:
我正在尝试创建一个 Case 语句来确定一个属性是否存在,如果存在则显示一个链接。
<% case %>
<% when @team_member.twitter? %>
<%= link_to '', @team_member.twitter, target: '_blank', class: 'icon-twitter' %
<% when @team_member.facebook? %>
<%= link_to '', @team_member.facebook, target: '_blank', class: 'icon-facebook' %>
<% end %>
显然这不起作用,我想澄清的是
1) 在最初的案例之后我要声明什么,我见过的例子有<% case a %> 或<% case object %>,对吗?
2) 如何检查对象是否具有属性?
所以我在这里要做的就是说当:team_member 填充了它的 twitter 属性然后显示链接,对于 facebook 属性也是如此。
任何帮助表示赞赏
【问题讨论】:
-
<% case %>或<% case thingy %>应该可以工作。你只是不能混合它们。所以如果你有thingy,那么when表达式必须代表thingy的值。否则,没有thingy,它们是独立的表达式。第一个具有真值的将被执行,case终止。为什么您认为您当前的case不起作用? -
不应该是
if而不是case吗?案例语句用于基于属性的不同值的不同行为 - 但您希望基于两个不同属性的行为。如果团队成员同时拥有 twitter 和 facebook 帐户会怎样? -
道歉,我认为很明显,当这两个属性都存在时,然后显示两个到 facebook 和 twitter 的链接
-
仅供参考,Ruby
case语句确实 not 需要目标表达式在案例的开头进行评估。例如,参见ruby.about.com/od/control/a/The-Case-Statement.htm。只要在整个case语句中始终如一地使用它,它就可以在头部没有表达式的情况下工作,并且在when子句中使用独立的可评估表达式。
标签: ruby-on-rails ruby case