0

这段代码的有效方法是什么?我认为应该有更好的方法。我想重新编码。

if @project.contest_entries.where("view_in_showcase = ?", true)
 entries = @project.contest_entries.where("view_in_showcase = ?", true).count
else
 entries = 1 
end
4

2 回答 2

3

你可以使用max

entries = [1, @project.contest_entries.where(view_in_showcase: true).count].max

我会定义一个范围ContestEntry来摆脱该where子句:

scope :showcased, where(view_in_showcase: true)

那么那将成为

entries = [1, @project.contest_entries.showcased.count].max
于 2013-01-30T00:35:23.007 回答
0
showcased_project_entries =
    @project.contest_entries.where("view_in_showcase = ?", true)
entries = showcased_project_entries ? showcased_project_entries.count : 1

或者

entries =
    @project.contest_entries.where("view_in_showcase = ?", true).try(:count) || 1

虽然,我必须承认我不确定在哪种情况下会where返回虚假值。

编辑:如评论中所述,该else子句确实永远不会触发,因此您的代码可能不会执行您想要的操作。如果这就是您的意思,请参阅 Andy H 的解决方案,了解您在没有发现任何结果时想要的情况entries1

于 2013-01-30T00:26:45.833 回答