IF嵌套Has_one中的条件

时间:2012-11-12 15:25:21

标签: ruby-on-rails-3 nested nested-attributes conditional-statements

psuedo关系运行 客户 - > has_many - >部门 - > has_many - >任务 - > has_one - >危险

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

这里是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的行不再是零。因此将危险形式识别为“完整”。理想情况下,我想这样做,以便通过某些字段的存在验证Hazard,但客户希望它能够作为“进行中”提交。所以我的计划是表单将能够提交验证。但是,Tasks#show中的条件语句将取决于Hazard模型中的键值不为空。

即。替换这一行

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

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

但是,在尝试执行此操作时,我遇到了“未定义”方法问题。

为了使用这个条件要求,这里有简单的工作吗?或者只是简单地在表单上进行验证?

1 个答案:

答案 0 :(得分: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