Методы экземпляра rails не работают на отношении

Я чувствую, что я делаю синтаксическую ошибку.

Я пытаюсь определить метод экземпляра в модели, который затем вызывается с получателем экземпляра. но вывод 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 ответ

Решение

Вы должны явно возвращать @percentages после if.

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
Другие вопросы по тегам