Rails中可靠的字符串插值

时间:2016-05-12 14:43:34

标签: ruby-on-rails ruby

在进行字符串插值之前,确保模型存在的最佳方法是什么?我有一个变量user,我需要看看user的主要内容是什么。名为user_attributes的表格中包含用户的信息。

#{user.user_attribute.major.name}

用户可能尚未指定专业,在这种情况下,他们还没有主要的模型实例。因此,当我尝试获取专业的名称时,我会得到一个“未定义的类型nil类型”错误。关于如何安全地做这个的任何建议?

4 个答案:

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