0

クライアント -> 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 == '' %>

ただし、これを実行しようとすると、「未定義」のメソッドの問題が発生します。

この条件付き要件を使用するために、ここで簡単な作業はありますか? それとも、単にフォームに検証を入れるのが最善の方法ですか?

4

1 に答える 1

0

クライアントがこれを進行中に送信できるようにしたい場合は、存在を確認するだけでは目的の場所に到達できません。代わりに、complete:boolean進行中に送信する必要があるモデルに属性を追加し、ユーザーまたはコールバックでこれらを設定できるようにします。

たとえば、これを行う良い方法は、フォームの下部に 2 つのボタンを提供することです。

= submit_tag "Save as Draft"
= button_tag "Save as Complete", :type => "button", :id => "complete"

button#complete次に、 でクリック イベントを受け取り、隠しフィールドを追加しcomplete = true、フォームを送信するスクリプトを呼び出すことができます。

そのスクリプトは次のようになります。

$('button#complete').click( function(event) {
  event.preventDefault();
  $('form#my_form').append('<input type="hidden" name="hazard[complete]" value="true">').submit();
});

または、モデルにコールバックを配置して、ハザードのすべてのフィールドが入力されているかどうかを確認し、完了としてマークすることもできます。

次に、条件付きで次のように記述します。

if @task.hazard.complete
于 2012-11-12T15:33:49.217 に答える