当我尝试以下作业时,我收到“被叫id为nil ..”错误:
@selected = @items_design.items_categories[0].id
我想做的是分配
@selected = nil if @items_design.items_categories[0].id == nil
我试过了:
@selected = @items_design.items_categories[0].id || nil
和其他几次尝试但没有运气。每次都有相同的错误。
答案 0 :(得分:1)
Ruby告诉你@ items_design.items_categories [0]是零。怎么样:
@selected =
if @items_design.items_categories[0]
@items_design.items_categories[0].id
else
nil
end
或者这个:
@selected = @items_design.items_categories[0] ? @items_design.items_categories[0].id : nil
编辑:从评论中添加另一个选项,这是一个更甜蜜的方法(感谢Daniël!):
@selected = @items_design.items_categories[0] && @items_design.items_categories[0].id
答案 1 :(得分:0)
问题是@ items_design.items_categories [0]是零。所以你可以试试这个
@selected = nil
@selected = @items_design.items_categories[0].id unless @items_design.items_categories[0].nil
答案 2 :(得分:0)
在将@items_design.items_categories[0]
消息发送到该对象之前,您必须确保对象nil
本身不是id
。这就是为什么你喜欢这样做的原因"版本无法正常工作,因为它仍会将id
消息发送给最终为nil
的对象。这可以工作
@selected = nil if @items_design.items_categories[0].nil?
但它仍然不是你想要的。尝试这样的事情:
@selected = @items_design.items_categories[0].nil? ? nil : @items_design.items_categories[0].id
或
if @items_design.items_categories[0].nil?
@selected = nil
else
@selected = @items_design.items_categories[0].id
end
你的第二次尝试
@selected = @items_design.items_categories[0].id || nil
无法正常工作,因为您始终会将id
消息发送到数组结果,即使它是nil。