0

Helo,我一直遇到这个问题。只是为了简单起见,我会简短地解释一下。

Student has_many   :grades
        belongs_to :class

Grade belongs_to   :student
      belongs_to   :rubric

Rubric belongs_to  :course
       has_many    :students, :through => :class

要创建新年级,我们需要找到现有的学生。我们可以打电话给@class.students 这样做。此外,应使用 rubric_id 创建成绩。

我已经知道如何做嵌套表格。但是如何将复数学生证传递给新年级?

如何构建控制器和视图来做到这一点?

4

1 回答 1

0

(Arg,我无法在评论中正确格式化我的问题,所以我必须使用答案。请耐心等待,因为我认为它还不能回答你的问题。)

我认为您的模型没有正确设置以实现这一目标。在您询问的场景中,学生和年级似乎是多对多关联。即一个学生有很多评分表,但一个评分表有很多学生,都通过年级(这是您的关联模型)。我理解正确吗?

Class   has_many   :students
        has_many   :grades
        has_many   :rubrics, :through => :grade

Student has_many   :grades
        has_many   :rubrics, :through => :grade
        belongs_to :class

# A grade is a particular rubric assigned to a student for a particular class
Grade belongs_to   :student 
      belongs_to   :rubric
      belongs_to   :class

Rubric belongs_to  :course
       has_many    :grades
       has_many    :students, :through => :grade

让我知道我上面的解释是否正确,我可以跟进控制器和视图的答案。我最近为另一个项目做了一些非常相似的事情。

编辑:既然我们已经澄清了问题,这是我建议的答案。目标是在特定班级中为多个学生分配一个评分量规。

没有内置的方法可以支持这样的事情,所以我们必须建立记录以及与正确的控制器动作和表单的关联。

在 Grades 模型中,我们添加了这个函数: def self.checked?(class_id, student_id, rubric_id) Grade.find(:all, :conditions => {:class_id => class_id, :student_id => student_id, :rubric_id => rubric_id} )。展示?结尾

在 form_for :rubric 中,我们创建如下内容:

<%= form_for @rubric do |f| %>
  <% for @class.students.each do |student| %>
  <%= fields_for :grades do |builder| %>
    <%= check_box_tag "grades[" + @class.id.to_s + "][]", rubric.id, Grade.checked?(@class.id, student.id, @rubric.id) %>
  <% end %>
  <%= f.submit "Save" %>
<% end %> 

现在在 RubricsController 的创建操作中,您应该有一个 params[:grades],它是一个带有键 [:class] 的哈希,其值应该只是一个学生 ID 数组。现在您可以创建关联这些模型的成绩对象,因为您有一个 rubric id (@rubric.id)、一个类 id (@class.id) 和一个学生 id 数组。

我希望我没有搞砸上面的代码,因为我不得不从我当前的实现中改变它。但是查看rails服务器的控制台日志应该可以让你弄清楚上述表单提交时传递了哪些参数并进行调整。

于 2012-07-02T17:34:54.787 回答