我有以下Rails模型关系:
if((Get-Process -Name test -ErrorAction SilentlyContinue) -eq $null){
."C:\Program Files (x86)\test.exe" Start-Sleep -s 7200 Stop-Process -name test}
现在,当我想使用join_table访问成绩表和学生表时,rails将失败。
示例:class Grade < ApplicationRecord
has_and_belongs_to_many students, join_table: :grade_student_mappings
has_many :students
end
class Student < ApplicationRecord
has_and_belongs_to_many :grads, join_table: :grade_student_mappings
belongs_to :grade
end
将始终回复我与成绩和学生之间直接关系的内容。通过join_table的关系将被忽略。
仅当我取消注释模型行Grade.find_by_id(1).student
和has_many
时,才会考虑通过join_table的间接关系。
我怎么能对RAILS说,我想要使用哪个级别和学生之间的关系?
答案 0 :(得分:0)
Rails支持两种多对多关系。 has_many through和has_and_belongs_to_many。你是混合两者。你需要选择一个,而且更灵活的是has_many。将模型文件更改为以下内容:
# app/models/grade_student_mapping.rb
belongs_to :grade
belongs_to :student
# app/models/grade.rb
has_many :grade_student_mappings, dependent: :destroy
# app/models/student.rb
has_many :grade_student_mappings, dependent: :destroy
has_many :grades, through: :grade_student_mappings
然后您可以在他们的节目模板上访问学生的成绩,例如在students_controller show action中设置成绩实例变量
# app/controllers/students_controller.rb
def show
@grades = @student.grades
end
并在学生的展示页面上显示成绩。如下所示:
# app/views/students/show.html.erb
<% @grades.each do |grade| %>
<%= grade.semester %>
<%= grade.course %>
<%= grade.letter %>
<% end %>