当User
object 为 nil(在 belongs_to 关联中定义)时,我得到一个错误:p.user.title
is 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
}
}
当User
object 为 nil(在 belongs_to 关联中定义)时,我得到一个错误:p.user.title
is 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)
}
}