如何使用ruby显示在另一个表中分配的信息?

时间:2018-02-19 18:00:51

标签: html ruby-on-rails ruby

我创建了三个模型,一个名为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>

我不知道如何引用学生的名字和班级名称。谢谢。

1 个答案:

答案 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

如果您有任何疑问,请告诉我