如果不是nil,则赋予对象的变量值

时间:2014-03-25 18:14:28

标签: ruby

当我尝试以下作业时,我收到“被叫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

和其他几次尝试但没有运气。每次都有相同的错误。

3 个答案:

答案 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。