使用&&在案件陈述中

时间:2018-03-22 10:03:17

标签: ruby-on-rails ruby

我试图用两个不同的条件写一个case语句:

  1. controller_name'pages''users'
  2. controller_name'static'action_name'homepage'
  3. 这是我尝试过的:

    case controller_name
    when 'pages', 'users'
      stylesheet_link_tag "style"
    when 'static' && action_name == 'homepage'
      stylesheet_link_tag "homepage"
    end
    

    第一个when按预期工作,但第二个when没有。我怀疑&&导致问题,但我无法弄清楚正确的语法。

2 个答案:

答案 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