使用嵌套表单在rails数据库中多次出勤?

时间:2013-07-17 16:03:44

标签: ruby-on-rails-3.2 nested-forms

我目前正在使用Ruby v 2.0.0p195和rails v 3.2.13

我对rails和ruby非常陌生,并且潜入那里学习如何通过进入一个有趣的项目来完成所有这些。

我想为学校出勤记录创建一个报名表,列出学生姓名,并提供在给定日期同时更新记录的机会。即表格上的一个大按钮,同时为所有学生更新所选日期,同时给予机会将特定学生标记为缺席。

我已经使用现有的学生控制器方法为学生创建个人记录,并且工作正常。我甚至可以为每个学生创建一个单独的出勤登记册,并且也可以,但是当我试图将整个团体放在一个列表中时,我无法让它工作,我对如何继续工作感到迷茫。

我是否使用嵌套表单方法在学生控制器中创建新方法,或者使用未用于创建和编辑这些记录的任何内容的考勤控制器方法。如果我使用考勤控制器,如何列出学生并从考勤控制器中链接这些记录?

我有两张桌子:

学生和出勤

student.rb

has_many :attendances, :dependent => :destroy

accepts_nested_attributes_for :attendances, :reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true

attendance.rb

attr_accessible :present, :attdate, :absent, :partial, :notified, :notes, :student_id

belongs_to :student, :class_name => 'Student'

routes.rb如下所示:

root to: 'home_page#home'
get 'attendance/:id', to: 'students#attentry'
get 'attendance', to: 'students#attentry'

resources :attendances

resources :students do
   member do
     get 'attentry'
   end
end

resources :students do
resources :attendances
end

resources :students

get 'students/attentry' 

我认为我的一些路线感到困惑,因为我不得不添加一些东西以使个别事情发挥作用。

我目前用于学生出勤的控制器方法是:

def attentry
    @student = Student.find(params[:id])
    @attendance = @student.attendances.build

respond_to do |format|
  format.html { render action: "attentry" }
  format.json { render json: @student }
 end
end

并且观点是这样的:

<%= form_for (@student) do |f| %>  
<%= f.text_field :name -%>
    <div class="span9">
        <table class = "table table-striped">
      <tr>
    <td>Date</td>
    <td>Present</td>
    <td>Absent</td>
    <td>  Part Day</td>
    <td>Notified</td>
    <td>Notes</td>
      </tr>
        <%= f.fields_for :attendances do |fc| %>
          <tr>
            <td><%= fc.text_field :attdate %></td>
        <td><%= fc.check_box :present %></td>
        <td><%= fc.check_box :absent %></td>
        <td><%= fc.text_field :partial %></td>
        <td><%= fc.check_box :notified %></td>
        <td><%= fc.text_area :notes, :rows => 3 %></td>
          </tr>
        <% end %>
      </div>
     </table>

    <br />


  <div class="actions">
     <%= f.submit %>
  </div>

无论如何,我得到的是一张表格,其中显示了一名学生的所有出勤详情,我试图将所有学生放在一张桌子上,这样我就可以一次性更新所有学生的按钮和复选框。

这是一个Javascript的东西还是我可以在Ruby / Rails的土地上这样做?

我一直在经历很多轨道广播和堆栈溢出帖子,并且已经逐渐将它们组合在一起并将它们拼凑在一起,但是这部分让我难以忍受了好几个星期。我开始怀疑Ruby和Rails的版本是否让我感到头疼,因为我发现很多东西都是潜在的答案,即使它们是从rails casts等逐字创建的,也似乎不能正常工作。 .....提前感谢任何想法,建议,地方。

1 个答案:

答案 0 :(得分:1)

帮助我实现多重更新表单的代码是在考勤控制器中,这是帮助我解决问题的原因:

def multiplenew
   if params["student_ids"].nil? 
      @attendance = Attendance.create(params[:attendance])

   else
     params["student_ids"].each do |id|
     @student = Student.find(id.to_i)
     @attendance = @student.attendances.create(params[:attendance])
     end
   end

   redirect_to attendances_url
end

基本上,它从每个学生旁边的复选框中收集身份信息,并为每个选中的患者创建每日出勤记录。字段有许多默认值,因此它工作得很好而且流畅。我还设置了验证,以便不能为模型中的任何特定学生重复日期。

它使用了一些来自轨道广播的多个编辑概念,由梦幻般的Ryan Bates,Stack Overflow上的大量时间,大量阅读api和rails指南以及一点巫术,但是此代码部分帮助我从一个提交按钮按下和一堆复选框创建多个出勤记录。它还允许在没有出勤需要的情况下创建空白日。甚至还有一些javascript在那里。一个快乐的露营者!现在让这个改成多个编辑页面.......