(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服务器的控制台日志应该可以让你弄清楚上述表单提交时传递了哪些参数并进行调整。