这段代码的有效方法是什么?我认为应该有更好的方法。我想重新编码。
if @project.contest_entries.where("view_in_showcase = ?", true)
entries = @project.contest_entries.where("view_in_showcase = ?", true).count
else
entries = 1
end
这段代码的有效方法是什么?我认为应该有更好的方法。我想重新编码。
if @project.contest_entries.where("view_in_showcase = ?", true)
entries = @project.contest_entries.where("view_in_showcase = ?", true).count
else
entries = 1
end
你可以使用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
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 的解决方案,了解您在没有发现任何结果时想要的情况entries
。1