Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在case语句中使用&&_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 在case语句中使用&&

Ruby on rails 在case语句中使用&&,ruby-on-rails,ruby,Ruby On Rails,Ruby,我试图用两个不同的条件写一个案例陈述: 控制器名称为“页面”或“用户” 控制器名称为“静态”,操作名称为“主页” 这就是我尝试过的: case controller_name when 'pages', 'users' stylesheet_link_tag "style" when 'static' && action_name == 'homepage' stylesheet_link_tag "homepage" end 第一个时间按预期工作,但第二个时间不按预期

我试图用两个不同的条件写一个案例陈述:

控制器名称为“页面”或“用户” 控制器名称为“静态”,操作名称为“主页” 这就是我尝试过的:

case controller_name
when 'pages', 'users'
  stylesheet_link_tag "style"
when 'static' && action_name == 'homepage'
  stylesheet_link_tag "homepage"
end
第一个时间按预期工作,但第二个时间不按预期工作。我怀疑是&&造成了问题,但我无法找出正确的语法。

这不起作用,因为案例控制器\u name会将每个when值与控制器\u name进行比较,因此您会得到如下结果:

('static' && action_name == 'homepage') === controller_name
即:

true === controller_name
# or
false === controller_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 controller_name
when 'pages', 'users'
  stylesheet_link_tag "style"
when 'static'
  stylesheet_link_tag action_name
end
它不起作用,因为case controller_name会将每个when值与controller_name进行比较,所以您会得到如下结果:

('static' && action_name == 'homepage') === controller_name
即:

true === controller_name
# or
false === controller_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 controller_name
when 'pages', 'users'
  stylesheet_link_tag "style"
when 'static'
  stylesheet_link_tag action_name
end

解决这个问题的另一种方法是使用lambda作为匹配器,因为可以使用===调用lambda

静态_主页=->name{name=='static'&&action_name=='homepage'} 案例控制器名称 当“页面”、“用户” 样式表\链接\标记样式 当静态\u主页 样式表链接标签主页 终止
解决这个问题的另一种方法是使用lambda作为匹配器,因为可以使用===调用lambda

静态_主页=->name{name=='static'&&action_name=='homepage'} 案例控制器名称 当“页面”、“用户” 样式表\链接\标记样式 当静态\u主页 样式表链接标签主页 终止