0

我有:

Aulas
has_many :grades
has_many :students, :through => :grades

Students
has_many :grades
has_many :aulas, :through => :grades

Grades
belongs_to :aula
belongs_to :student

我想grades.name从 Aula 和 Aula 内的特定学生之间的连接中显示出来。这不起作用,但你会明白我想要什么:

<% aula.students.each do |student| %>
  <%= link_to student.name, student %>-<%= student.grade.name %>
<% end %>

好的,我在 Aula (id:68) 里面,如果我做students.grades,我会从所有 Aula

[#<Grade id: 51, name: AA1, student_id: 22, aula_id: 68 >,#<Grade id: 52, name: AA2, student_id: 22, aula_id: 69 >,#<Grade id: 53, name: AA3, student_id: 22, aula_id: 70 >]

我如何仅获得与此 Aula (aula_id:68) 相关的年级名称?

4

2 回答 2

1

一个学生has_many :grades(带有's'),所以当你有student记录时,你不能调用grade它(没有's'),因为Rails 不知道你在寻找哪个年级。

您需要做的是调用student.grades(带有's'),这将通知Rails 您正在查看该学生的所有成绩。

但它还没有完成,因为student.grades你正在获得这个学生的所有成绩。您有 2 个解决方案:

要么你想全部展示它们,你必须遍历它们,像这样:

<% student.grades.each do |grade| %>
  <%= grade.name %>
  <br />
<% end %>

要么您正在寻找收藏中的一个特定等级,并且只想显示这个等级(假设您正在寻找 id=5 的等级),您会这样做:

<%= student.grades.find(5).name %>

另外,我建议您使用特定的词汇,这很好,因此当您在 google 中搜索解决方案时,它将帮助您找到正确的信息。在这里,您正在谈论模型之间的连接,在 Rails 中我们称之为关联 :)

于 2013-07-16T01:10:25.683 回答
0

好的。我想我可以通过学生的成绩而不是通过学生获得年级的名字,所以我做了

<% aula.grades.each do |grade| %>
  <%= link_to grade.student.name, student %>-<%= grade.name %>
<% end %>

现在它很好。

于 2013-07-19T21:23:01.323 回答