如果User
对象为nil(在belongs_to关联中定义),则会收到错误:p.user.title
为nil
。
如何检查.map中是否定义了p.user
或p.user.title
以避免错误?
@posts = Post.all
results = @posts.map { |p|
{
:id => p.id,
:text => p.text,
:user_title => p.user.title
}
}
答案 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]
或nil
为p.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)
}
}