我无法创建要编辑的表单StudentReferrals
。每个学生都有一些基本信息,如姓名/生日/学习。除了这些信息之外,学生还可以参考一下课程清单。我想要一个表格,允许有人填写学生信息,然后选择最多10个学生需要参加的课程。除了课程外,每个“学生+课程”组合还有一个credits_required
字段,表示学生需要参加的课程的学分数。Rails中嵌套对象的形式
的使学生在上课的列表来自Course
模型
我有3种型号:
class StudentReferral < ActiveRecord::Base
has_many :student_referral_courses, :dependent => :destroy
has_many :courses, :through => :student_referral_courses
# Fields: name, studentid, advisor_name, birthday
end
class StudentReferralCourse < ActiveRecord::Base
belongs_to :student_referral
belongs_to :course
validates_presence_of :credits_required
# Fields: (student_referral_id, course_id, credits_required)
attr_accessor :course1, ..., :course9
attr_accessor :credits1, ..., :credits9
after_create :add_courses
def add_courses
self.student_referral_courses.destroy_all
unless self.course1.blank?
self.student_referral_courses.create! :course_id => self.course1, :student_referral_id => self.id, :credits_required => self.credits1
end
unless self.course2.blank?
self.student_referral_courses.create! :course_id => self.course2, :student_referral_id => self.id, :credits_required => self.credits2
end
...
end
class Course < ActiveRecord::Base
# Fields: department, name
end
而且我有一个表格,以创建/编辑的学生转介是像以下:
<%= form_for(@student_referral) do |f| %>
<% if @student_referral.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@student_referral.errors.count, "error") %> prohibited this student referral from being saved:</h2>
<ul>
<% @student_referral.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<fieldset class="form">
<legend>Student Information</legend>
<table cellpadding="3" cellspacing="0" border="0" class="vert">
<tr><th class="subr"><%= f.label :studentid %></th><td><%= f.text_field :studentid %></td></tr>
<tr><th class="subr"><%= f.label :name %></th><td><%= f.text_field :name %></td></tr>
<tr><th class="subr"><%= f.label :birthday %></th><td><%= f.date_select :birthday, :start_year => 1990 %></td></tr>
<tr><th class="subr"><%= f.label :advisor %></th><td><%= f.text_field :advisor %></td></tr>
</table>
</fieldset>
<fieldset class="form">
<legend>Course Information</legend>
<span>You <b>MUST</b> select the credits required for each course.</span>
<ol>
<li><%= select(:student_referral, :course1, Course.all(:order => "dept,name ASC").collect {|p| [ "#{p.dept}: #{p.name}", p.id ] }, { :include_blank => '' })%>
<%= select_tag 'student_referral[credits1]', options_for_select(['Select One',5.0,4.5,4.0,3.5,3.0,2.5,2.0,1.5,1.0,0.5]) %></li>
<li><%= select(:student_referral, :course2, Course.all(:order => "dept,name ASC").collect {|p| [ "#{p.dept}: #{p.name}", p.id ] }, { :include_blank => '' })%>
<%= select_tag 'student_referral[credits2]', options_for_select(['Select One',5.0,4.5,4.0,3.5,3.0,2.5,2.0,1.5,1.0,0.5]) %></li>
...
</ol>
</fieldset>
<%= f.submit :class => "l-button black" %>
<% end %>
我的问题是,我似乎无法创建或没有做使用验证一个可怕的黑客编辑这些记录。我有course1
到course9
的10 attr_accessible
字段和我在after_create
宏上使用的信用相同。然而,这并不让我看到课程的任何验证错误(如他们没有放任何学分)
我试过使用accepts_nested_attributes_for :student_referral_courses
,但我似乎无法让它做我想做的事。我真的想用Rails的方式来做这件事,我觉得我正在做一个可怕的黑客攻击。
这可能会有所帮助:http://railscasts.com/episodes/73-complex-forms-part-1 – jefflunt
@normalocity - 我已经尝试过,但我似乎无法让它工作。 –