Методы экземпляра 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