2015-04-29 66 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 
相关问题