2012-12-06 22 views
1

我有一個公司類:如何在視圖中顯示關聯值?

class Company < ActiveRecord::Base 
    validates :name, :presence => true 
    has_many :employees 
end 

,並在員工只能與一個公司相關聯的Employee類:

class Employee < ActiveRecord::Base 
    validates :lastName, :presence => true 
    belongs_to :company 
    validates :company, :presence => true 
end 

當我列出員工,

<% @employees.each do |employee| %> 
    <tr> 
    <td><%= employee.firstName %></td>  <- works 
    <td><%= employee.lastName %></td>  <- works 
    <td><%= employee.company.name %></td> <- Get an 'undefined method `name' for nil:NilClass' error 
    </tr> 
<% end %> 

我以爲員工公司是急於加載的,因此我可以直接在對象中訪問關聯,或者我的語法錯誤?

任何幫助,將不勝感激

+0

當你說失敗時,你是什麼意思? –

+0

對不起安迪,更新了錯誤的問題。 –

回答

2

我能想到的兩種方案:

  1. company_id = NULL

  2. company_id = ID但這個ID的公司不存在了。

在任何情況下,它是微不足道的控制檯檢查違規對象(S):Employee.reject(&:company)

+0

Doh!我把約束放在後面,DB中有一個空值的員工,刪除它,一切都很好! –

+0

在那個筆記上,是否有一個乾淨的方法來防止這種情況發生?就像在視圖中的第三級,如果有一個空的company_id,將替代「」? –

+1

當然,寫'employee.company.try(:name)|| 「沒有公司」。 – tokland

0

由於員工屬於公司,因此您應該從公司自己加載員工。例如:

class EmployeeController < ApplicationController 

    def index 
    @employees = @company.employees 
    ... 
    end 
    ... 
end 
+0

感謝simone,但@employees將屬於各種公司 –