私有方法`select'调用#<room:0x00000001f6f5f8>(NoMethodError)

时间:2016-10-17 20:34:37

标签: ruby select methods

我是Ruby的新手,我在完成我想要解决的练习时遇到了麻烦。这是一个经典的房间游戏,经过一段时间的混乱,我想出了一个对我来说看起来不错的代码 - 减去那不起作用。

我试图从类中的另一个方法中调用select方法,我很确定它是一个数组(@position),但是我收到了上面的错误信息。

以下是我的代码示例,欢迎任何有关.select为私有的想法!

 GridView::widget([
  'dataProvider' => $dataProvider,
  'columns' => [
    'id',
    'name',
    'created_at:datetime',
    // ...
  ],
 ]);

2 个答案:

答案 0 :(得分:0)

您在类型为Room的对象上调用select,而不是数组。这只是一个房间,因为这条线

@position = @rooms[0]    

答案 1 :(得分:0)

select的接收者是@position,它是Room的一个实例。让我们来看看这个方法:

Room.instance_method(:select)
  #=> #<UnboundMethod: A(Kernel)#select>
Room.private_instance_methods.include?(:select)
  #=> true 
Room.public_instance_methods.include?(:select)
  #=> false

这告诉我们at方法是未绑定的(来自模块Kernel,即Kernel#select)和private,后者解释了收到的错误消息。

Kernel#select不是所需的方法。这是因为select的接收方不正确。我希望您想要Array#select,这与@rooms兼容,但我不知道代码是否正确。