我有这个简单的案例陈述:
class_name = case link_path
when current_page?(jobs_path) then 'current'
when current_page?(open_estimates_path) then 'current'
when current_page?(tasks_path) then 'current'
when current_page?(calendar_dispatch_path) then 'current'
end
debugger
在我的断点,我可以问current_page?(tasks_path)
,它会返回true
。
然后我问class_name
,然后返回nil
。
我在这里做了什么语法错误?
ruby 1.9.2p136
Rails 3.0.10
答案 0 :(得分:2)
case
语句不符合您的想法。它将主题与when
分支中声明的所有值进行比较,并返回第一个匹配的值。例如:
color = case num_color
when 1 then 'red'
when 2 then 'green'
when 3 then 'blue'
end
您将link_path
作为主题,因此会将link_path
与when
分支中的每个布尔值进行比较。由于link_path
可能不是布尔值,因此不会评估任何分支。也许你想要这样的东西:
class_name = current_page?(link_path) ? 'current' : ''
如果class_name
是当前页面,则会将"current"
设置为link_path
,否则设置为""
。
答案 1 :(得分:1)
您正在将字符串与布尔值进行比较。
link_path
会与您在where
中输入的每个值进行比较,直到找到匹配为止。显然,这里没有匹配。
答案 2 :(得分:1)
您正在将布尔值与link_path进行比较,因此不会匹配任何案例。为什么不使用if / elsif?