0

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

我对 Rails 和 ruby​​ 非常陌生,并且已经潜入其中,通过进入一个有趣的项目来学习如何做到这一切。

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

我已经在使用现有的学生控制器方法为学生创建个人记录,并且效果很好。我什至可以为每个学生创建一个单独的考勤登记册,这也很有效,但是当我尝试将整个小组放在一个列表中时,我无法让它发挥作用,而且我不知道如何进行。

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

我有 2 张桌子:

学生和出席

学生.rb

has_many :attendances, :dependent => :destroy

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

出勤率.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 的土地上做这个?

我经历了很多railscasts和stackoverflow帖子,并逐渐将它们放在一起并修补在一起,但这部分让我难倒了好几个星期。我开始怀疑 Ruby 和 Rails 的版本是否让我头疼,因为我发现的很多潜在答案似乎都无法正常工作,即使它们是从 rails cast 等逐字创建的。 .....提前感谢您的任何想法,建议,看的地方。

4

1 回答 1

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

基本上,它从位于每个学生旁边的复选框中收集 id 信息,并为每个被勾选的学生创建每日出勤记录。这些字段有许多默认值,因此它运行良好且流畅。我还设置了验证,以便不能为模型中创建的任何特定学生重复日期。

它使用了出色的 Ryan Bates 的 railscasts 中的一些多重编辑概念,大量时间在 Stack Overflow 上,大量阅读 api 和 rails 指南以及一点巫术,但这个代码部分帮助我通过一个提交按钮按下和一堆复选框创建多个考勤记录。它还允许在不需要出勤的情况下创建空白日。甚至那里也有一些javascript。一个快乐的露营者!现在让它变成一个多重编辑页面......

于 2013-08-28T11:30:32.563 回答