我试图用两个不同的条件写一个case
语句:
controller_name
为'pages'
或'users'
controller_name
为'static'
且action_name
为'homepage'
这是我尝试过的:
case controller_name
when 'pages', 'users'
stylesheet_link_tag "style"
when 'static' && action_name == 'homepage'
stylesheet_link_tag "homepage"
end
第一个when
按预期工作,但第二个when
没有。我怀疑&&
导致问题,但我无法弄清楚正确的语法。
答案 0 :(得分:9)
它不起作用,因为case controller_name
将每个when
- 值与controller_name
进行比较,所以你有类似的东西:
('static' && action_name == 'homepage') === controller_name
变为:
true === controller_name
# or
false === controller_name
您可以使用action_name
语句处理if
:
case controller_name
when 'pages', 'users'
stylesheet_link_tag "style"
when 'static'
if action_name == 'homepage'
stylesheet_link_tag "homepage"
else
# ...
end
end
或其他case
:
case controller_name
when 'pages', 'users'
stylesheet_link_tag "style"
when 'static'
case action_name
when 'homepage'
stylesheet_link_tag "homepage"
when '...'
# ...
end
end
或者只是:
case controller_name
when 'pages', 'users'
stylesheet_link_tag "style"
when 'static'
stylesheet_link_tag action_name
end
答案 1 :(得分:0)
解决此问题的另一种方法是使用lambda作为匹配器,因为#===
可用于调用lambda,所以此方法有效。
static_home_page = ->(name) {name == 'static' && action_name == 'homepage'}
case controller_name
when 'pages', 'users'
stylesheet_link_tag "style"
when static_home_page
stylesheet_link_tag "homepage"
end