这段代码的有效方法是什么?我认为应该有更好的方法。我想重新编码。
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