このコードの効果的な方法は何ですか?もっと良い方法があるはずだと思います。これを再コード化したいです。
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