简体   繁体   中英

how to set multiple default form values on submission in rails?

attendance table that takes has attribute status , date , recuritment_id , and project_site_id .

project_site has one_to_many association with attendance

recuritment has one_to_many association with attendance .

i am taking attribute from recruitment table when attribute status is joined in attendance#form view.

<% (1..(Time.days_in_month @project_site.attendance_month.strftime("%m").to_i)).each do |date| %> <% (1..(Time.days_in_month @project_site.attendance_month.strftime("%m").to_i)).each do |date| %> here @project_site.attendance_month contains the attendance month value. based on month i calculate number of days column along with name from recuritmnet table.

here is view-

在此处输入图像描述


holydays master contains corresponding month holyday's date and in view it auto match date and prints "H",
All input default selected as P. there is final submission_button that chnages boolean attribute. now on final submission i want to push all default selected P into attendance table.


attendance_controller.rb
<table>
   <thead>
      <tr>
         <th class="attendance-emp-name">Emp. Name</th>
         <% (1..(Time.days_in_month @project_site.attendance_month.strftime("%m").to_i)).each do |date| %>
         <th class="text-center"><%= date %></th>
         <% end %>
      </tr>
   </thead>
   <tbody>
      <% @recruitment.where(location: @project_site.site_id).each do |recruitment| %>
      <tr>
         <td class="attendance-emp-name"><%= recruitment.name %></td>
         <% (1..(Time.days_in_month @project_site.attendance_month.strftime("%m").to_i)).each do |date| %>
         <%= form_with(model: attendance, :html => {:id => 'attendance-form-validation'}, url:[@project_site, @attendance], local: true) do |f| %>
         <% if HolydayCalendar.find_by(date: (@project_site.attendance_month.strftime("%Y-%m")+"-"+date.to_s), total_site_id: @project_site.site_id)%>
         <td class="holyday text-center"><%= "H" %></td>
         <% elsif recruitment.attendances.find_by(attendance_date: (@project_site.attendance_month.strftime("%Y-%m")+"-"+date.to_s)) == nil %>
         <td>
            <%= f.select :status, [['P', 1], ['A', 2], ['L', 4], ['WE', 5], ['CO', 6]], {}, { onchange: 'this.form.submit()', class: 'attendance-select-input' } %>
         </td>
         <% else %>
         <% attendance_value =  recruitment.attendances.find_by(attendance_date: (@project_site.attendance_month.strftime("%Y-%m")+"-"+date.to_s)) %>
         <%if attendance_value.status == 1 %>
         <td class="presant text-center"><%="P" %></td>
         <% elsif attendance_value.status == 2 %>
         <td class="absent text-center"><%="A" %></td>
         <%elsif attendance_value.status == 3 %>
         <td class="holyday text-center"><%="H" %></td>
         <%elsif attendance_value.status == 4 %>
         <td class="leave text-center"><%= "L" %></td>
         <%elsif attendance_value.status == 5 %>
         <td class="weekend text-center"><%= "WE" %></td>
         <%elsif attendance_value.status == 6 %>
         <td class="compoff text-center"><%= "CO" %></td>
         <% end %>
         <% end %>
         <%= f.hidden_field :attendance_date, value: (@project_site.attendance_month.strftime("%Y-%m")+"-"+date.to_s)%>
         <%=f.hidden_field :recruitment_id, value: recruitment.id%>
         <%=f.hidden_field :project_site_id, value: @project_site.id%>
         <% end %>
         <% end %>
      </tr>
      <% end %>
   </tbody>
</table>
<% if @project_site.submission_status == true %>
<div class="text-center">
   <%= link_to "Submit Attendance", set_submission_status_project_site_path(@project_site), method: :put, data: { confirm: 'Make Sure you marked all attendance before submission' }, :class=>"button primary disabled" %>
</div>
<% else %>
<div class="text-center">
   <%= link_to "Submit Attendance", set_submission_status_project_site_path(@project_site), method: :put, data: { confirm: 'Make Sure you marked all attendance before submission' }, :class=>"button primary" %>
</div>
<% end %>


from.html.erb (attendance controller view)

  def set_submission_status
      @project_site = ProjectSite.find(params[:id])
      @project_site.update(submission_status: true)

  end

project_sites_controller.rb

 def set_submission_status @project_site = ProjectSite.find(params[:id]) @project_site.update(submission_status: true) end

It's a little unclear what your question is, but I gather it has to do with your form sending back an array op options.

If you want your html form to return an array of information, then you need to indicate it in your html using the name = "attendance[]" syntax, notice the square brackets.

Check out this article on the subject https://mattstauffer.com/blog/a-little-trick-for-grouping-fields-in-an-html-form/

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM