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 == '' %>
但是,在尝试执行此操作时,我遇到了“未定义”方法问题。
为了使用这个条件要求,这里有简单的工作吗?或者只是简单地在表单上进行验证?
答案 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