このコードの効果的な方法は何ですか?もっと良い方法があるはずだと思います。これを再コード化したいです。
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
句は実際にはトリガーされないため、コードはおそらくあなたが望むことをしません。結果が見つからないentries
場合は、Andy H のソリューションを参照してください。1