所以我有两个名为Student and Classroom的课程。这是一个多对多的关系所以我的模型是
class Student< ApplicationRecord
has_many :student_classrooms
has_many :classrooms, :through => :student_classrooms
end
class Classroom< ApplicationRecord
has_many :student_classrooms
has_many :students, :through => :student_classrooms
end
class StudentClassroom< ApplicationRecord
belongs_to :student
belongs_to :classroom
end
我在学生中的控制器
class CoursesController < ApplicationController
def new
@student = Student.new
end
def create
@student = Student.new(course_params)
if @student.save
flash[:success] = "Student created!"
redirect_to @student
end
end
def show
@student = Student.find(params[:id])
@name = @student.name
#@classroom = Classroom.find_by(name: @name) <--
end
...
end
我的问题是如何获取学生的教室位置并将其存储到变量中,以便我能够在网页上显示。
答案 0 :(得分:1)
使用:
def show
@student = Student.find(params[:id])
@name = @student.name
@classrooms = @student.classrooms
end
这将为您提供一个ActiveRecord::Relation
对象,您可以在其中进一步where
语句。或者,您可以在视图中使用它来迭代并显示所有学生的课堂。
马克说得对,在你的show.html.erb
你可以做类似的事情:
<% @classrooms.each do |classroom| %>
<%= classroom.name %>
<% end %>
如果您想要的不仅仅是名称(例如教室编号),我建议使用_classroom.html.erb
部分。您可以使用以下内容:
<% @classrooms.each do |classroom| %>
<%= render partial: 'classroom', locals: {classroom: classroom} %>
<% end %>
我还建议花几分钟时间学习/转换为HAML。因此,您可以拥有一个看起来更像的show.html.haml
文件:
- @classrooms.each do |classroom|
.classroom-container{id: classroom.id}
= render partial: 'classroom', locals: {classroom: classroom}
或者,对于Mark的例子:
%ul
- @classrooms.each do |classroom|
%li
= classroom.name
不是更漂亮吗?而且,你可以省去所有麻烦的输入烦人的erb语法。而且不必记得关闭标签! HAML充满彩虹,闻起来像棉花糖!
答案 1 :(得分:0)
在你的show方法中:
def show
@student = Student.find(params[:id])
@name = @student.name
@classrooms = @student.classrooms
end
然后在您的app/views/students/show.html.erb
文件中,您可以执行以下操作:
<ul>
<% @classrooms.each do |classroom| %>
<li><%= classroom.name %></li>
<% end %>
</ul>
这会将您正在查看的学生的所有课堂名称打印为无序列表。