2015-04-29 68 views
0

我正在嘗試顯示用戶的學校名稱。當他們註冊時,用戶可以選擇他們所屬的學校(不是每個人都這樣做,所以有時候這個欄目留空)。即使對某些對象爲空也顯示該字段

目前我有:

if user.is_a? Student 
    %td= user.school 
end 

其認定的學生屬於學校,但其顯示爲ActiveRecord的記錄。每個學校都有一個名字,如果我選擇一個學生並且:@student.school.name它給了我沒有問題的學校的名字。

但是,如果我做的:

if user.is_a? Student 
    %td= user.school.name 
end 

它保持了零扔了undefined method名」:NilClass`

我敢肯定,這是因爲一些學生沒有一所學校。我試圖將這個添加到if語句,但我似乎無法使其工作。我試過的變化:

if user.is_a? Student && !user.school.blank? 

.any?.empty?但他們沒有工作,他們只是讓no method .blank?

任何幫助嗎?

回答

2

我會做這些事情

A)最快

%td= user.school && user.school.name 

B)乾淨(或者,至少,清潔)

#in user class 
def school_name 
    self.school && self.school.name 
end 

#in view 
%td= user.school_name 
0

您可以使用一個內膽採用present?方法用於顯示一個值,當它出現時,沒有學校現在和學校名稱:

%td= user.school.present? ? user.school.name : '-' 

Here是一個很好的表,說明喜歡nil?方法之間的差異,empty?present?等等。

注意!這不是寫邏輯眼簾,文件很好的做法,所以我建議把它的輔助方法裏面:

觀點:

%td= school_name(user) 

user_helper.rb:

def school_name(user) 
    user.school.present? ? user.school.name : '-' 
end 
相關問題