rails实例方法无法处理关系

时间:2014-11-17 08:16:58

标签: ruby-on-rails instance-method

我觉得我正在制作语法错误。

我试图在模型中定义一个实例方法,然后用实例接收器调用它。但输出是nilClass。

我做错了什么?

模型

class Park < ActiveRecord::Base

  has_many :reviews

  def percentages
    @percentages = Array.new(5, 0)
    if reviews.any?
      5.downto(1).each_with_index do |val, index|
        @percentages[index] = (reviews.with_stars(val).size) * 100 / (reviews_count)
      end
      @percentages
    end
  end

end

控制器

class ParksController < ApplicationController

  def show
     @park = Park.find(params[:id])
     @percentages = @park.percentages
  end

end

查看

= @percentages[0]

输出

undefined method `[]' for nil:NilClass

1 个答案:

答案 0 :(得分:2)

您应该在if。

之后显式返回@percentages
def percentages
  @percentages = Array.new(5, 0)
  if reviews.any?
    5.downto(1).each_with_index do |val, index|
      @percentages[index] = (reviews.with_stars(val).size) * 100 / (reviews_count)
    end
  end
  @percentages
end

此外,您不需要方法中的实例变量。一个简单的变量就足够了。

def percentages
  percentages = Array.new(5, 0)
  if reviews.any?
    5.downto(1).each_with_index do |val, index|
      percentages[index] = (reviews.with_stars(val).size) * 100 / (reviews_count)
    end
  end
  percentages
end