出于某种原因,when @orgs
无效:
@orgs = Organization.all.select{|a|a.active}.count
case collection.size
when 0; "No #{entry_name.pluralize} found"
when @orgs; "#{@orgs} Businesses Returned!"
else; "#{collection.total_entries} of #{@orgs} Businesses Returned!"
end
这在语法上是否准确?它将始终返回最后一个else
语句。即使@orgs == @orgs。
@orgs = 1211的实际数量。
因此,如果我使用when语句when 1211;
,它仍然无法捕获。这里有语法错误吗?
答案 0 :(得分:3)
您是否尝试过以下语法?
case collection.size
when 0 then "No #{entry_name.pluralize} found"
when @orgs then "#{@orgs} Businesses Returned!"
else "#{collection.total_entries} of #{@orgs} Businesses Returned!"
end
答案 1 :(得分:2)
您的语法不是问题。我认为,你的条件中的逻辑都搞砸了。
所以,@ orgs 不是= 1211 ,@ orgs是一个大小为1211的集合。差别很大。
collection.size
,大概应为@orgs.size
假设我们将其更改为:
case @orgs.size
...
然后:
when
语句将在@orgs.size == 0
when
语句仍会失败,因为@orgs.size != @orgs
- 它永远不会。 @orgs
指的是对象集合,而@orgs.size
指的是该集合的大小。即使@orgs == nil
它仍然会失败,因为@orgs.size
会抛出错误,因为您在size
对象上调用nil
方法,这是不允许的。else
语句始终被调用的语句,并且因为您编写它的方式可以防止任何其他情况出现。< / LI>
然而,这可能还不够。它看起来像你试图返回单数或复数文本取决于你有多少。这是您可能要编写的代码,没有使用分号:
@active_orgs = Organization.all.select{|a| a.active}
@singular_name = Organization.class.name
@plural_name = @singular_form.pluralize
case @active_orgs.size
when 1
"1 active #{@singular_name} of a total #{Organization.count} #{@plural_name}!"
else
"#{@active_orgs.count} active #{@singular_name} of a total #{Organization.count} #{@plural_name}!"
end
即使计数为0
,这也会复数,因此会说0 active Organizations of a total 125 Organizations!
...或当值为1
时,它会显示1 active Organization of a total 125 Organziations!
如果您不希望Organization
大写,则可以添加对.downcase
的调用来处理此问题。