0

伪关系故障客户 -> has_many -> 部门 -> has_many -> 任务 -> has_one -> 危险

在 Tasks#show 上,我目前仅在存在危险时才存在危险(由任务表格中的是/否问题确定)。如果存在,我想用条件语句显示危害,如果危害表尚未完成,则显示“填写表格”链接和“不完整”文本。以及“查看表格”和“完整文本(如果已完成危害表格)。

这是来自 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 的行也不再为零。从而将危险表标识为“完成”。理想情况下,我想让它通过某些字段的存在来验证危害,但客户希望它能够作为“进行中”提交,所以我的计划是表单将能够在没有的情况下提交验证。但是,Tasks#show 中的条件语句将取决于 Hazard 模型中的键值不为空。

即替换这条线

<% if @task.Hazard.nil? %>

<% if @task.Hazard.risk_total == '' %>

但是,尝试执行此操作时出现“未定义”方法问题。

为了使用这个条件要求,这里有什么简单的工作吗?还是只是在表单上进行验证是最好的方式?

4

1 回答 1

0

如果客户希望能够在进行中提交,那么您将无法到达您想去的地方,只是检查是否存在。相反,complete:boolean在您的模型上添加一个需要在进行中提交的属性,然后允许这些属性由用户设置或在回调中设置。

例如,这样做的一个好方法可能是在表单底部提供两个按钮:

= 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 回答