2012-03-02 7 views
0

Rails 3.2アプリでは、私はモデルプロジェクトを持っています。これには多くのタスクがあります。各タスクがあります。ProjectショービューでRailsに関連するhas_manyレコードのif文を実行する方法

1=Normal 
2=Urgent 

を次のように整数であるステータスフィールドを、私は、関連するタスクのいずれかが緊急のフラグが設定されている場合は、テキストの警告を表示したいです。

ステータスフィールドは、プロジェクトモデル内であった場合、私はこのようなものだろう:場合、私は、関連するすべてのタスクを通じてであれば同様の声明、その意志サイクルを設定するにはどうすればよい

<% if Project.status == 2 %> 
    <div class="alert">URGENT TASKS!</div> 
<% end %> 

をし、trueを返します少なくとも1つのタスクが緊急としてマークされていますか?

この種の機能をどのような用語で検索するべきかはわかりません。あるいは、私は正しい方法で問題を見ていないでしょう。私は正しい方向に任意のポインタに感謝したいと思います。

おかげ

答えて

3

プロジェクトでこのメソッドは、それを行います。

<% if @project.urgent? %> 
    ...whatever ... 
<% end %> 

def urgent? 
    tasks.detect{|t| t.status==2} 
end 

次に、あなたが行うことができますが、プロジェクトに@projectセットを持っている場合、あなたが見ています

この次のビットはあなたのコメントに答えて追加されました。プロジェクトのこの方法は、特定のプロジェクト内の任意のタスクの優先順位が最も高いのセット(あなたの例では最低数)を返します:

<% case @project.highest_priority 
    when 1 %> 
    ...priority 1 stuff... 
<% when 2 %> 
    ...priority 2 stuff... 
<% when 3 %> 
    ...and so on... 
<% end %> 
+0

感謝kevtufc、それは素敵なソリューションです。これを拡張してより多くのオプションをカバーするにはどうすればよいですか?例えば、より多くの状態を有する例えば、。 '1 =高、2 =中、3 =低、4 =非常に低い...など'、高いステータスがある場合はメッセージを表示し、そうでない場合はメッセージを表示したい中位の状態、もしそうでなければ...それぞれの条件に対して別々のメソッドを作成する必要がありますか?それとももっと上手なやり方がありますか? –

+0

私はこれをカバーするために私の答えを広げました。 –

+0

ありがとう@kevtufc、それは本当に素晴らしい解決策です! –

0

I:

def highest_priority 
    tasks.map{|t| t.status}.min 
end 

次に、あなたのビューに切り替えることができますあなたは、プロジェクトが完了すべき緊急課題を持っているかどうかをチェックしたいと思うでしょう。だけでなく、場合は、あなたのタスクモデルの定数として、あなたのステータスを定義していると仮定すると、

def has_urgent_task? 
    tasks.map(&:status).include?(Task::URGENT) 
end 

:ケースthatsの私はそれを達成するための最良の方法は、プロジェクトのモデルでは、このような何かを新しいメソッドを作成することだと思うならばタスクを交換::だからあなたのビューであなただけのこの操作を行う必要がある2.

のための緊急:

<% if @project.has_urgent_task? %> 
    <div class="alert">URGENT TASKS!</div> 
<% end %> 
+0

おかげでcicloon、すばらしい解決策。私はkevtufcの答えに行った。なぜなら、それは優雅な解決策だからだ。あなたもしかし:)働いた。助けてくれてありがとう –

関連する問題