检查.map方法中的nil值

时间:2013-04-09 14:04:41

标签: ruby-on-rails-3

如果User对象为nil(在belongs_to关联中定义),则会收到错误:p.user.titlenil

如何检查.map中是否定义了p.userp.user.title以避免错误?

@posts = Post.all 
results = @posts.map { |p| 
{ 
  :id => p.id,
  :text => p.text,
  :user_title => p.user.title
}
}

3 个答案:

答案 0 :(得分:2)

很容易就是馅饼。

p.user.try(:title)

如果用户不是nil,则上面运行#title。

答案 1 :(得分:1)

简单 - 只需在访问p.user之前测试title

@posts = Post.all 
results = @posts.map do |p| 
  { 
    :id => p.id,
    :text => p.text,
    :user_title => p.user && p.user.title
  }
end
如果results[i][:user_title]nilp.user

p.user.title将为{{1}}。

答案 2 :(得分:1)

您可以使用try方法。如果用户为nil

,则会返回nil
@posts = Post.all 
results = @posts.map { |p| 
    { 
      :id => p.id,
      :text => p.text,
      :user_title => p.user.try(:title)
    }
}