在进行字符串插值之前,确保模型存在的最佳方法是什么?我有一个变量user
,我需要看看user
的主要内容是什么。名为user_attributes
的表格中包含用户的信息。
#{user.user_attribute.major.name}
用户可能尚未指定专业,在这种情况下,他们还没有主要的模型实例。因此,当我尝试获取专业的名称时,我会得到一个“未定义的类型nil类型”错误。关于如何安全地做这个的任何建议?
答案 0 :(得分:4)
您可以避免try
并向模型或装饰器添加方法..
def major_name
user_attribute.major && user_attribute.major.name
end
OR
def major_name
user_attribute.major.name if user_attribute.major?
end
检查:https://codereview.stackexchange.com/questions/28610/handling-nil-trying-to-avoid-try
答案 1 :(得分:3)
您可以使用try
方法:
# if model is present
{user.user_attribute.major.try(:name)} # => "<MAJOR_NAME>"
# if model is NOT present
{user.user_attribute.major.try(:name)} # => ""
您可以阅读有关try
的更多信息。
答案 2 :(得分:2)
您可以使用lonely operator。它就像try
,但功能稍差(在你的情况下无关紧要)。
user.user_attribute.major&.name
答案 3 :(得分:-1)
这可能是红宝石清教徒的“最差”答案,但在某些情况下它适用于我:
"#{user.user_attribute.major.name rescue nil}"