无法通过嵌套表单提交复选框



我正在尝试创建一个应用程序,让教师能够每天选择不在学校的学生。我通过nifty-generators gem创建了模型。问题是它不会提交给notpresents表。请帮助。

# == Schema Information
#
# Table name: students
#
#  id         :integer          not null, primary key
#  name       :string(255)
#  group_id   :integer
#  created_at :datetime         not null
#  updated_at :datetime         not null
#
class Student < ActiveRecord::Base
  attr_accessible :name, :group_id
  belongs_to :days
end

# == Schema Information
#
# Table name: notpresents
#
#  id         :integer          not null, primary key
#  student_id :integer
#  day_id     :integer
#  created_at :datetime         not null
#  updated_at :datetime         not null
#
class Notpresent < ActiveRecord::Base
  attr_accessible :student_id, :day_id
  belongs_to :days
end

# == Schema Information
#
# Table name: days
#
#  id         :integer          not null, primary key
#  title      :string(255)
#  created_at :datetime         not null
#  updated_at :datetime         not null
#
class Day < ActiveRecord::Base
  attr_accessible :title, :presents 
  has_many :notpresents
  accepts_nested_attributes_for :notpresents
end

和view_form .html.erb

<%= form_for @day do |f| %>
  <%= f.error_messages %>
  <p>
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </p>
<% for student in Student.find(:all) %>
        <div>
            <%= check_box_tag :notpresents, student.id%>
            <%= student.name %>
        </div>
    <% end %>

  <p><%= f.submit %></p>
<% end %>

我从来没有使用过漂亮的生成器,但是如果一个学生可以缺席很多天,一天可以有很多学生缺席,你不应该有一个多对多的关系吗?

class Student < ActiveRecord::Base
  attr_accessible :name
  has_many :days, through: :notpresents
  has_many :notpresent
end
class Days < ActiveRecord::Base
  attr_accessible :date
  has_many :students, through: :notpresents
  has_many :notpresent
end
class :Notpresents < ActiveRecord::Base
  attr_accessible :student_id, :day_id
  belongs_to :students
  belongs_to :days
end

它也可以是has_and_belongs_to_many关联,但是使用has_many:通过你可以有一个字符串或文本属性来记录缺席或类似的东西。

我推荐使用simple_form作为表单,它使它非常简单:

app/controllers/days_controller.rb:

def edit
  @day = Day.find(params[:id])
end

app/views/天/_form.html。erb:

<%= simple_form_for @day do |f| %>
  <%= f.association :students, as: :check_boxes %>
<% end %>

最新更新