0

Userobject 为 nil(在 belongs_to 关联中定义)时,我得到一个错误:p.user.titleis nil

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

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

3 回答 3

2

非常简单。

p.user.try(:title)

如果 user 不是 nil,上面会在 user 上运行 #title。

于 2013-04-09T14:07:57.360 回答
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]然后将是nil如果p.user或者p.user.title是。

于 2013-04-09T14:07:40.557 回答
1

您可以使用该try方法。nil如果用户是,这将返回nil

@posts = Post.all 
results = @posts.map { |p| 
    { 
      :id => p.id,
      :text => p.text,
      :user_title => p.user.try(:title)
    }
}
于 2013-04-09T14:08:10.413 回答