当Userobject 为 nil(在 belongs_to 关联中定义)时,我得到一个错误:p.user.titleis nil。
如何检查p.user或p.user.title在 .map 中定义以避免错误?
@posts = Post.all
results = @posts.map { |p|
{
:id => p.id,
:text => p.text,
:user_title => p.user.title
}
}
当Userobject 为 nil(在 belongs_to 关联中定义)时,我得到一个错误:p.user.titleis nil。
如何检查p.user或p.user.title在 .map 中定义以避免错误?
@posts = Post.all
results = @posts.map { |p|
{
:id => p.id,
:text => p.text,
:user_title => p.user.title
}
}
非常简单。
p.user.try(:title)
如果 user 不是 nil,上面会在 user 上运行 #title。
简单 - 只需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是。
您可以使用该try方法。nil如果用户是,这将返回nil
@posts = Post.all
results = @posts.map { |p|
{
:id => p.id,
:text => p.text,
:user_title => p.user.try(:title)
}
}