【问题标题】:NoMethodError undefined methodNoMethodError 未定义的方法
【发布时间】:2015-05-19 06:26:08
【问题描述】:

正在处理期末课程项目。我需要为成绩单页面分别计算我的主要学分和非主要学分的 GPA。当我在下面作为控制器运行此代码时,它可以正常工作并显示我主要和非主要的总学分,但是当我输入此代码时

@GPA_for_major = (course.credits * course.grade.scale) / course.credits

在 If 语句中,我在 TransController#transcript 中得到 NoMethodError
# Course::ActiveRecord_Relation:0x00000007b99798 的未定义方法 'credits'>

class Transcript
    def initialize (course_array)
        @course = course_array
    @total_non_major_credits = 0
        @total_major_credits = 0
        @GPA_for_major = 0
        @GPA_for_non_major = 0
        for item in @course
            if  item.is_for_major 
              @total_major_credits = @total_major_credits + item.credits 
           else
             @total_non_major_credits = @total_non_major_credits + item.credits
           end  
        end
    end

    def course
        @course
    end

    def total_non_major_credits
        @total_non_major_credits
    end

    def total_major_credits
        @total_major_credits
    end

    def GPA_for_major
        @GPA_for_major
    end

    def GPA_for_non_major
        @GPA_for_non_major
    end
end

这是我的成绩单页面的控制器

class TransController < ApplicationController
  def transcript
    @courses = Course.all
    @transcript =Transcript.new(@courses)
  end
end

我不确定还包括什么,因为这是我的第一篇文章,但任何帮助都会很棒!谢谢!

【问题讨论】:

  • 如果您将数组命名为复数形式,您的问题会更加明显。您的 @course 变量不包含 a 课程,它包含课程数组,因此应将其称为 @courses。然后,很容易看出你不能做@courses.credits

标签: ruby-on-rails ruby methods undefined nomethoderror


【解决方案1】:

@course 似乎指的是课程数组,if 语句位于循环中,该循环遍历为每门课程设置局部变量 item 的项目。鉴于此,您应该使用 item 而不是 course:

@GPA_for_major = (item.credits * item.grade.scale) / item.credits

【讨论】:

    猜你喜欢
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 2019-06-12
    • 2013-11-14
    • 2021-07-07
    • 2017-11-13
    相关资源
    最近更新 更多