我创建了三个模型,一个名为Student,另一个名为Cclass,最后一个名为Enrollment。
我有多对多的关系,许多学生可以有很多课程,反之亦然。我想修复这个多对多关系,所以我创建了一个名为enrollment的新模型 - 它应该显示数据库中的学生和这样的类:
------ 班级 ------------------ 学生
1. Class_name ------ 1. Student_name
至少有类似的东西,但我无法显示注册课程中两个表格的信息。
这是我的student.rb
class Student < ApplicationRecord
attr_accessor :FirstName
has_many :enrollments
has_many :cclasses, through: :enrollments
端
这是我的class.rb
class Cclass < ApplicationRecord
attr_accessor :Name
has_many :enrollments
has_many :students, through: :enrollments
端
这是我的enrollment.rb
class Enrollment < ApplicationRecord
belongs_to :student
belongs_to :cclass
end
这是我的enrollments_controller.rb
class EnrollmentsController < ApplicationController
def index
@enrollment = Enrollment.all
end
def show
@enrollment = Enrollment.find(params[:Student_id, :Cclass_id])
end
def new
@enrollment.new
end
def update
end
def create
end
def edit
end
def destroy
end
private
def enrollment_params
params.require(:enrollment).permit(:Student_id, :Cclass_id)
end
end
这是我的注册模式的index.html.erb
<h1> Enrollment's Index </h1>
<table>
<tbody>
<thead> Student and Classes Enrolled
<th> Student </th>
<th> Classes </th>
<% Array(@enrollment).each do |e| %>
<td><%= link_to e.student.FirstName %> </td>
<td><%= link_to e.cclass.Name %> </td>
<% end %>
</thead>
</tbody>
</table>
我不知道如何引用学生的名字和班级名称。谢谢。
答案 0 :(得分:3)
我看到一些你可以改进的事情,首先确保将snake_case用于符号,方法和变量。另外,使用小写作为大写引用类和常量。请参阅以下内容:
学生班:
class Student < ApplicationRecord
attr_accessor :first_name
has_many :enrollments
has_many :cclasses, through: :enrollments
Cclass课程:
class Cclass < ApplicationRecord
attr_accessor :name
has_many :enrollments
has_many :students, through: :enrollments
在您的注册控制器#index中,您正在调用方法.all
并将其分配给名为@enrollment
的变量,该变量不反映正在存储的数据的实际值。由于Enrollment.all
返回值是一个包含数据库中所有注册的数组类型对象。所以考虑到这一点。
注册控制器:
class EnrollmentsController < ApplicationController
def index
@enrollments = Enrollment.all
end
def show
@enrollment = Enrollment.find(params[:student_id, :cclass_id])
end
def new
@enrollment.new
end
def update
end
def create
end
def edit
end
def destroy
end
private
def enrollment_params
params.require(:enrollment).permit(:student_id, :cclass_id)
end
end
最后,对于您的index.html.erb
文件,您有这行代码
<% Array(@enrollment).each do |e| %>
您不需要致电Array
,因为您在控制器操作中分配的@enrollments
变量已经是响应方法{{1}的数组类型对象}}
each
如果您有任何疑问,请告诉我