我试图创建一个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属性也是如此。
任何帮助表示赞赏
答案 0 :(得分:5)
case
需要一个目标表达式来评估。case
可以在没有目标表达式的情况下工作,如上所述{ {3}}。这使case
像if/else
构造一样工作。ActiveRecord
模型,则可以使用has_attribute?(attr_name)
在您的代码中,使用if
语句可能更容易,因为如果用户设置了这些属性,您可能希望显示twitter和facebook链接。
<% if @team_member.has_attribute?(:twitter) %>
<%= link_to '', @team_member.twitter, target: '_blank', class: 'icon-twitter' %>
<% end %>
<% if @team_member.has_attribute?(:facebook) %>
<%= link_to '', @team_member.facebook, target: '_blank', class: 'icon-facebook' %>
<% end %>
答案 1 :(得分:1)
Case用于通过可能的匹配集测试值:
<% case @team_member.whatever %>
<% when :facebook %>
<%= link_to '', @team_member.facebook, target: '_blank', class: 'icon-facebook' %>
<% when :twitter %>
<%= link_to '', @team_member.facebook, target: '_blank', class: 'icon-facebook' %>
<% end %>
您可能正在寻找的是if
elsif
声明:
<% if @team_member.twitter? %>
<%= link_to '', @team_member.twitter, target: '_blank', class: 'icon-twitter' %
<% elsif @team_member.facebook? %>
<%= link_to '', @team_member.facebook, target: '_blank', class: 'icon-facebook' %>
<% end %>
答案 2 :(得分:0)
我认为正常if
语句会更好地符合您的意图,因为每个分支都有不同的条件。
case
用于检查单个属性或变量的不同可能值,如下所示:
num_value = 5
case num_value
when 0 # means: if num_value = 0
doStuff()
when 5 # means: if num_value = 5
doOtherStuff() # this one is executed
end
它通常用于输入一个可能的分支。但是,在您的示例中,如果用户同时设置了这两个链接,您可能希望显示twitter和facebook链接,因此您应该使用单独的if语句:
<% if @team_member.twitter? %>
<%= link_to '', @team_member.twitter, target: '_blank', class: 'icon-twitter' %
<% if @team_member.facebook? %>
<%= link_to '', @team_member.facebook, target: '_blank', class: 'icon-facebook' %>
<% end %>
如果您只需要一个,请在第二次检查中使用elsif
...