Rails undefined方法`hospital'为nil:NilClass

时间:2013-03-07 09:08:10

标签: ruby-on-rails validation model-view-controller exception

尊敬的人......

在我的应用程序中,我想显示给定员工的最后一个医院名称......

我试过这个:

<%= @employee.postings.last.hospital.hospital_name %>

所有必需的关联都是正确的...因为这适用于所有有帖子的员工......但是我发现错误的员工甚至没有一个帖子......

我试过

<%= @employee.postings.last.hospital.hospital_name.to_s %>

甚至

<% if !@employee.postings.last.hospital.nil? %>

甚至是“尝试”功能......

我只是希望它在没有显示任何数据时...而不是令人生畏的错误......

如果我可以学习如何跳过打印nil值那么它会很棒......我在其他地方也面临类似的问题......

对于前: 在我的员工主页面中,我想显示我正在做的每个员工的所有资格:

<tbody>
<% @employees.each do |employee| %>
  <tr>
    <td><%= employee.emp_id %></td>
    <td><%= employee.emp_treasury_id %></td>
    <td><%= link_to employee.emp_full_name,employee_path(employee) %></td>
    <% @employee.qualifications.each do |qualification| %>
            <td><%= qualification.qualification_name.Qualification_name %></td>
    <% end %>
  </tr>
<% end %>

但我最终再次得到“未定义的方法`资格'为nil:NilClass”错误... 我试了很多......但还是......

Thanx和Sincere Regards

-Sky

3 个答案:

答案 0 :(得分:1)

使用try

<%= @employee.postings.last.try(:hospital).try(:hospital_name) %>

使用if

<%= @employee.postings.last.hospital.hospital_name if @employee.postings.exists? && @employee.positings.last.hospital %>

答案 1 :(得分:1)

试试这个

<%= @employee.postings.last.try(:hospital).try(:hospital_name) || "N/A" %>

答案 2 :(得分:1)

应该是

  

员工不是@employee

请您使用try或respond_to以确保更安全。因为您可能没有运行迁移。

.respond_to?(:field) && model.try(:field)

由于

<% @employees.each do |employee| %>
  <tr>
    <td><%= employee.emp_id %></td>
    <td><%= employee.emp_treasury_id %></td>
    <td><%= link_to employee.emp_full_name,employee_path(employee) %></td>
    <% employee.qualifications.each do |qualification| %>
            <td><%= qualification.try(:qualification_name).try(:Qualification_name) %></td>
    <% end %>
  </tr>
<% end %>