显示该字段,即使某些对象为空

时间:2015-04-29 14:26:18

标签: ruby-on-rails

我正在尝试为用户显示学校名称。当他们注册时,用户可以选择他们所属的学校(虽然不是每个人都这样做,但有时这个专栏会留空)。

目前我有:

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?等。

请帮忙吗?

2 个答案:

答案 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