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句は実際にはトリガーされないため、コードはおそらくあなたが望むことをしません。結果が見つからないentries場合は、Andy H のソリューションを参照してください。1

于 2013-01-30T00:26:45.833 に答える