【问题标题】:Rails getting an error '/' undefined methodRails 收到错误“/”未定义方法
【发布时间】:2014-01-21 06:19:51
【问题描述】:

您好,我找到了平均值 这就是我想做的事情

我有一组变量,我根据 user_id 和 company_id 从 db 获取这些变量,我无法在那时和那里添加,因为我需要在我的显示页面中显示单个参数,我还想显示它们的平均值 所以我试图做如下

  @r1=company_rating.collect(&:r1)
  @r2=company_rating.collect(&:r2)
  @r3=company_rating.collect(&:r3)
  @r4=company_rating.collect(&:r4)

所以我是这样做的

arr = [@r1,@r2,@r3,®r4] 
@totalaverage= arr.sum.compact /arr.size
My array sample looks like [10,20,30,nil],[nil,nil,nil,nil],[30,40,50,60]

如果我的数组全部为 Nil,那么它应该显示为 Nil 但是我收到一个错误 undefined method `/' for # 以及为什么我要紧凑是因为我有其中的 nil 值的总和

所以请帮助如何做到这一点。

【问题讨论】:

  • 谁能告诉我为什么对我投反对票。

标签: ruby-on-rails ruby


【解决方案1】:

首先,您将arr 定义为一个数组数组。 @r1@r2 等都是数组,[@r1, @r2, ...] 所做的只是将它们混合在另一个数组中。您可能希望合并它们,而不是将它们包含在另一个数组中:

arr = @r1 + @r2 + @r3 + @r4

其次,你应该先调用arr.compact,然后总结内容。另外,我不太确定sum 方法。我会改用reduce(&:+)。因此,要回答您的问题,'/' 失败,因为 compact 返回一个 Array,而您正试图将一个 Array 划分为一个数字。这看起来更好:

arr = @r1 + @r2 + @r3 + @r4
@totalaverage = arr.compact.reduce(&:+) / arr.size

Array#reduce(&:+) 所做的是在数组成员之间应用+ 运算符并返回值(不是数组)。

编辑: arr.sum 确实如果您使用的是 Ruby on Rails。否则请改用arr.reduce(&:+)

【讨论】:

  • 谢谢 Atlast 我解决了。还可以告诉如何找到不包括 nil 的数组的大小,例如如果我有一个数组 [3,nil,4,nil,5] 那么我的数组大小应该是 3 我怎样才能得到它。
  • @user3144005 [3,nil,4,nil,5].compact.size 会起作用。
  • 所以在你的例子中它将是... / arr.compact.size
  • @user3144005 你也可以试试我的回答,尽管投了反对票。如果所有值都是nil,则此答案无效。
  • arr 肯定是数组数组。@r1,@r2,@r3,®r4 都是数组。现在arr = [@r1,@r2,@r3,®r4].. 表示arr 是数组数组。
【解决方案2】:

按照下面的方法做,应该可以:

@totalaverage= arr.flat_map(&:compact).inject(:+) /arr.size.to_f

其实@totalaverage是一个数组数组。 @totalaverage 的每个内部元素(数组)也可以有 nil 值(如您所示)。因此,您需要从@totalaverage 的内部数组中删除那些nil 条目(如果有)。 arr.map(&:compact) 也会做同样的工作。

【讨论】:

    【解决方案3】:

    如果您使用的是 Rails,最简单的方法是:

    @totalaverage = a.flatten.compact.sum.to_f / a.flatten.compact.size if a.flatten.compact.present?
    

    这会将结果分配给@totalaverage,如果所有值都是nil,则分配给nil

    【讨论】:

    • 首先非常感谢您的帮助,我已经解决了我的问题,请给我一些积极的投票,因为我的帐户被阻止了。我的问题对其他人来说可能很简单,但作为一个新人独自学习,我很难理解。所以你能投票给我吗?
    猜你喜欢
    • 2013-12-27
    • 1970-01-01
    • 2016-05-01
    • 2019-04-14
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多