我正在尝试为用户显示学校名称。当他们注册时,用户可以选择他们所属的学校(虽然不是每个人都这样做,但有时这个专栏会留空)。
目前我有:
if user.is_a? Student
%td= user.school
end
找到学生所属的学校,但将其显示为活动记录。每个学校都有一个名字,如果我选择一个学生并执行:@student.school.name
它给了我学校的名称,没有任何问题。
但是,如果我这样做:
if user.is_a? Student
%td= user.school.name
end
它一直为nil:NilClass`
抛出undefined method
名称'
我很确定这是因为有些学生没有学校。我试图将其添加到if语句中,但我似乎无法使其工作。我尝试了各种变体:
if user.is_a? Student && !user.school.blank?
.any?
,.empty?
,但没有一个有效,他们只是no method .blank?
等。
请帮忙吗?
答案 0 :(得分: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
答案 1 :(得分:0)
您可以使用带有present?
方法的单行代码在没有在校时显示一个值,在学校名称时显示该名称:
%td= user.school.present? ? user.school.name : '-'
Here是一个很好的表格,用于解释nil?
,empty?
,present?
等方法之间的差异。
NB!将逻辑编写到视图文件中并不是一个好习惯,所以我建议将它放在帮助方法中:
在视图中
%td= school_name(user)
在 user_helper.rb:
内def school_name(user)
user.school.present? ? user.school.name : '-'
end