在一对一关系上创建多个对象

时间:2012-07-02 17:15:51

标签: ruby-on-rails ruby-on-rails-3

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创建成绩。

我已经找到了如何做嵌套表单。但是如何将复数学生的成绩转到新的成绩?

如何构建控制器和视图?

1 个答案:

答案 0 :(得分: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的创建操作中你应该有一个参数[:grades],它是一个带键[:class]的哈希值,其值应该只是一个学生ID数组。现在,您可以创建关联这些模型的成绩对象,因为您有一个量规id(@ rubric.id),一个类ID(@ class.id)和一个学生ID数组。

我希望我没有搞砸上面的代码,因为我必须从当前的实现中改变它。但是,查看rails服务器的控制台日志应该可以让您确定在提交上述表单时传递的参数并进行调整。