Ruby on Rails undefined method 'course_name' for nil:NilClass



我正在创建一个简单的学生规划器应用程序。如果我尝试在向课程添加作业之前查看课程(课程#显示(作业,我会收到一个错误,而不是一个空列表,顶部只打印了course_name。

错误如下: "undefined 方法 'course_name' for nil:NilClass">

我的课程#显示页面是在第 2 行抛出错误的地方:

<div class='container text-center'>
<h2> <%= @course.course_name %> </h2>
<% @course.assignments.all.each do |assignment| %>
<%= assignment.title %>, <%= assignment.course.course_name %>, <%= assignment.due_date %> 
<br>
<% end %>
</div>

我courses_controller:

class CoursesController < ApplicationController
def new
@course = Course.new
end
def create
@course = Course.create(course_params)
if @course.save
redirect_to student_courses_path(@student)
else
render :new
end
end
def index
student = Student.find_by(id: params[:student_id])
@courses = Course.all
end
def show
student = Student.find_by(id: params[:student_id])
@course = student.courses.find_by(id: params[:id])
end
def edit
end
def update
end
private
def course_params
params.require(:course).permit(:course_name)
end
end

课程模式:

class Course < ActiveRecord::Base
has_many :assignments
has_many :students, through: :assignments
validates :course_name, presence: true
end

对正在发生的事情有什么想法吗?任何建议都非常感谢!

@course来自您的show控制器操作,您尝试通过其 ID 查找它,但您没有检查是否找到了它。

如果Course对于Student是必需的,请在Student模型上添加:course_id状态验证,并且在创建学生时,如果未分配课程,则会收到错误。

如果Course对于Student不是强制性的,您可以在视图文件中添加一个<% if @course %>块,并在显示消息的<% else %>部分添加。例如:

<% if @course %>
<div class='container text-center'>
<h2><%= @course.course_name %></h2>
<% @course.assignments.all.each do |assignment| %>
<%= assignment.title %>, <%= assignment.course.course_name %>, <%= assignment.due_date %> 
<br>
<% end %>
</div>
<% else %>
<div class='container text-center'>
<p>This student has no course yet.</p>
</div>
<% end %>

还要按如下方式修改您的 html 代码,并仅在作业存在时才显示作业。

也不需要在关联的对象上写入.all

<% if @course %>
<div class='container text-center'>
<h2><%= @course.course_name %></h2>
<% if @course.assignment.any? %>
<% @course.assignments.each do |assignment| %>
<%= assignment.title %>, <%= assignment.course.course_name %>, <%= assignment.due_date %> 
<br>
<% end %>
<% end %>
</div>
<% else %>
<div class='container text-center'>
<p>This student has no course yet.</p>
</div>
<% end %>

相关内容

最新更新