我觉得我正在制作语法错误。
我试图在模型中定义一个实例方法,然后用实例接收器调用它。但输出是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
答案 0 :(得分:2)
您应该在if。
之后显式返回@percentagesdef 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