クライアント -> has_many -> Departments -> has_many -> Tasks -> has_one -> Hazard
Tasks#show I では、現在、ハザードが存在する場合にのみハザードが表示されます (タスク フォームのはい/いいえの質問で判断されます)。存在する場合は、ハザードフォームが完成していない場合は「フォームに記入」リンクと「不完全」テキストを表示する条件付きステートメントでハザードを表示したいと思います。「フォームの表示」と「ハザードフォームが完成している場合は完全なテキスト。
app/views/tasks/show.html.erb からのコードの抜粋です。
<% if @task.Hazard_exist == 'Yes' %>
<tr>
<td>Hazard</td>
<% if @task.Hazard.nil? %>
<td><%= link_to 'Fill Out Form', new_client_department_task_Access_path(@client,@department,@task) %></td>
<td id="incomplete">Incomplete!</td>
<td class="risk_val">Form not complete</td>
<% else %>
<td><%= link_to 'View Form', client_department_task_Hazard_path(@client,@department,@task) %>
<%= link_to 'Edit Form', edit_client_department_task_Hazard_path(@client,@department,@task) %></td>
<td id="complete">Complete</td>
<td class="risk_val"><%= @task.Hazard.risk_total%></td>
<% end %>
</tr>
<% end %>
これは機能しますが、問題は、「フォームに記入」してからデータベース @task.Hazard の行をキャンセルしても nil ではなくなることです。したがって、ハザード フォームを「完全」として識別します。理想的には、ハザードが特定のフィールドの存在によって検証されるようにしたいのですが、クライアントはそれを「進行中」として送信できるようにしたいので、フォームを送信せずに送信できるようにする予定です検証。ただし、Tasks#show の条件ステートメントは、Hazard モデルのキー値が空白でないことに依存します。
つまり、この行を置き換えます
<% if @task.Hazard.nil? %>
と
<% if @task.Hazard.risk_total == '' %>
ただし、これを実行しようとすると、「未定義」のメソッドの問題が発生します。
この条件付き要件を使用するために、ここで簡単な作業はありますか? それとも、単にフォームに検証を入れるのが最善の方法ですか?