1

我知道我很接近,但我被困住了。

这些是我正在使用的三个模型:AttendanceSheet、Attendance 和 Child。

AttendanceSheet
has_many :attendances, :dependent => :destroy
accepts_nested_attributes_for :attendances
belongs_to :course

Child
has_many :attendances

Attendance
belongs_to :attendance_sheet
belongs_to :child

所以加入模型是出勤。我正在尝试创建一个包含特定课程所有学生列表的出勤表,然后使用复选框标记他们是否参加。像这样...

Attendance Sheet
Course: Biology
Date: _____________

Michael Scott   [] Notes: sick
Jim Halpert     [] Notes: ____
Dwight Schrute  [] Notes: ____

所以出勤表有以下列:

child_id
attended (boolean) to check if the student attended course or not
notes

我遇到问题的部分是想出某种循环来显示属于该班级的所有学生,并为每个学生提供参加的字段和注释。

这就是我所拥有的...

_form.html.erb

<%= simple_form_for @attendance_sheet, :html => { :class => 'form-horizontal' } do |f| %>

  <h2>Course: <%= @course.name %></h2>

  <div class="form-inputs">
    <%= f.input :attendance_on, :as => :string, :hint => 'YYYY-MM-DD', :input_html => {:class => :datepicker, :value => Date.today} %>
  </div>

      <% @course.children.each do |child| %>
        *** trouble here ***
        <%= check_box_tag %> <%= child.full_name %><br />
      <% end %>

  <div class="form-actions">
    <%= f.button :submit %>
  </div>
<% end %>

出勤表控制器.rb

def new
  @attendance_sheet = AttendanceSheet.new
  @course = Course.find(params[:course_id])

  respond_to do |format|
    format.html
  end
end
4

1 回答 1

2

使用 rails accepts_nested_attributes_for :attendances,您可以在控制器中执行以下操作:

def new
  @attendance_sheet = AttendanceSheet.new
  @course = Course.find(params[:course_id])
  @course.children.each do |c|
    @attendance_sheet.attendances << Attendance.new(:child => c)
  end

  respond_to do |format|
    format.html
  end
end

然后在你的simple_form_for @attendance_sheet

<%= f.fields_for :attendances do |att| %>
  <%= att.check_box :child, :label => att.object.child.full_name %>
<% end %>
于 2012-08-16T17:58:04.407 回答