更新动作,似乎无所事事(Update action seems to be doing nothin

2019-10-19 19:26发布

目前,我有一个overtime_definition_controller用这样的方法

class Edms::OvertimeDefinitionsController < ApplicationController

  require 'will_paginate/array'
  layout :compute_layout


  def new
    @flag = params[:flag]
    @employee = Employee.find(params[:id])
    @overtime = OvertimeDefinition.new
  end

  def create
    @employee = Employee.find(params[:overtime_definition][:employee_id])
    @overtime = OvertimeDefinition.new(params[:overtime_definition])
    if (params[:half_day_extra_duty_hours][:hour].to_s !="" || params[:half_day_extra_duty_hours][:minute].to_s !="")
      @overtime.half_day_extra_duty_hours   = params[:half_day_extra_duty_hours][:hour].to_s + ":" + params[:half_day_extra_duty_hours][:minute].to_s + ":" + "00"
    else
      @overtime.half_day_extra_duty_hours = nil
    end
    if (params[:full_day_extra_duty_hours][:hour].to_s !="" || params[:full_day_extra_duty_hours][:minute].to_s !="")
      @overtime.full_day_extra_duty_hours   = params[:full_day_extra_duty_hours][:hour].to_s + ":" + params[:full_day_extra_duty_hours][:minute].to_s + ":" + "00"
    else
      @overtime.full_day_extra_duty_hours = nil
    end
    if @overtime.save
      flash[:notice] = "Overtime Successfully Created for #{@employee.name}"
      redirect_to :action => 'search_overtime'
    end
  end

  def edit
    @flag = params[:flag]
    @overtime = OvertimeDefinition.find(params[:id])
    @employee = Employee.find(params[:employee_id])
  end

  def update
    @employee = Employee.find(params[:id])
    @overtime = OvertimeDefinition.find(params[:id])
    if @overtime.update_attributes(params[:overtime_definition])
      flash[:notice] = "Overtime Successfully Updated for #{@employee.name}"
      redirect_to :action => 'search_overtime'
    else
      render :action => 'edit',:flag=>params[:flag]
    end
  end

  def search_overtime
    @overtimes = OvertimeDefinition.all
    @departments = @site.is_central ? {} : @site.departments
    @designations = @site.is_central ? {} : @site.designations
    @active_profile = @site.is_central ? Employee.get_all_employees.paginate(:page => params[:page]) : @site.employees.get_all_employees.paginate(:page => params[:page]) 
    if request.xml_http_request?
      render :update do |page|
      page['search_result_div'].replace_html :partial => "search_overtime_employee_list"
    end
  end
end

然而,当我尝试更新,它什么都不做。

更新前值:

id = 235employee_id = 1353和剩余的字段。

更新后的值:

id = 235employee_id = 235和剩余的值(相同的值更新之前)。

但是,它是将employee_idid是的overtime_definition 。 真奇怪。

edit.rhtml

<%= form_tag :action => 'update',:id => @overtime.id,:employee_id => @employee.id,:flag=> params[:flag] %>
<%= render :partial =>'form' %>
<center>
  <%= submit_tag "Update",:onclick=>"return validate()",:class=>"buttons" %>
</center>
<%= link_to "Back" ,:action => "search_overtime" %>

与_form.rhtml

<table cellspacing="5">
  <tr>
    <td><b>Employee Code</b></td>
    <%= hidden_field 'overtime_definition','employee_id',:value=>params[:id] %>
    <td><%= @employee.employeeid %></td>
    <td><b>Employee Name</b></td>
    <td><%= @employee.personnel.display_full_name %></td>
  </tr>
  <tr>
    <td><b>Department</b></td>
    <td><%=  @employee.department ? @employee.department.name : "" %></td>
    <td><b>Designation</b></td>
    <td><%= @employee.designation ? @employee.designation.name : "" %></td>
    <td><b>Location</b></td>
    <td><%= @employee.location.name%></td>
  </tr>
</table>

</br>
<fieldset>
  <table cellspacing="5">
    <%= form_for :overtime_definition, :builder => LabelFormBuilder do |od| %>
      <tr>
        <td>
          <label for="half_day_extra_duty_hours">
            Half Day Extra Duty Hours
          </label>
        </td>
        <td class ="datefamily">
          <%= select_time(@overtime.half_day_extra_duty_hours, {:include_blank => true, :time_separator => ":",:prefix => "half_day_extra_duty_hours"})%>
        </td>
      </tr>
      <tr>
        <td>
          <label for="full_day_extra_duty_hours">
            Full Day Extra Duty Hours
          </label>
        </td>
        <td class ="datefamily">
          <%= select_time(@overtime.full_day_extra_duty_hours, {:include_blank => true, :time_separator => ":",:prefix => "full_day_extra_duty_hours"})%>
        </td>
      </tr>
      <tr>
        <%= od.sr_check_box :is_salary_basis, {}, true, false, :label => "Is Salary Basis"%>
      </tr>
      <tr>
        <%= od.sr_check_box :is_fixed_amount, {}, true, false, :label => "Is Fixed Amount"%>
        <td colspan="2" id="ov_hm" style="display: none">
          Half Day Amount
          <%= od.text_field :half_day_amount, :onkeypress => "return numbersonly(event)", :style => "width:40px" %>
        </td>
        <td colspan="2" id="ov_fm" style="display: none">
          Full Day Amount
          <%= od.text_field :full_day_amount, :onkeypress => "return numbersonly(event)", :style => "width:40px" %>
        </td>
      </tr>
    <% end %>
  </table>
</fieldset>

_search_overtime_employee_list.rhtml

<table cellspacing="0" cellpadding="0" width="100%" id='type'>
  <tr class="tblebluehead">
    <th>
      SI.NO
    </th>
    <th>
      Code
    </th>
    <th>
      Name
    </th>
    <th>
      Department
    </th>
    <th>
      Designation
    </th>
    <th colspan="3">
      Functions
    </th>
  </tr>
  <% count=0 %><% i=0 %>
  <% for employee in @active_profile %>
    <% if i%2==0 %>
      <tr class="tablerow1">
    <% else %>
      <tr class="tablerow2">
    <%end %><% i=i+1 %>
    <td>
      <%= count=count+1 %>
    </td>
    <td>
      <%= employee.employeeid %>
    </td>
    <td>
      <%=h employee.name %>
      <%resigned = EmployeeSeparationDetail.find(:first, :conditions => ["employee_id =? and status ='Active' and approval_status ='Approved'", employee.id])%>               
      <% if resigned %>
        <span style="color:red"> (R)</span>
      <% end %>
    </td>
    <td>
      <%=h employee.department ? employee.department.name : ""%>
    </td>
    <td>
      <%=h employee.designation ? employee.designation.name : "" %>
    </td>
    <td>
      <%=link_to "Calculation" ,:action => "new",:id=>employee.id,:flag=>"Calculation" %>
    </td>
    <% for overtime in @overtimes %>
      <% if overtime.employee_id == employee.id%>
        <td>
          <%= link_to "Re-Calculate",:action => "edit",:id=>overtime.id,:employee_id => employee.id,:flag=>"Re-Calculate" %>
        </td>
      <% end %> 
    <% end %>
    </tr>
  <% end %>
</table>
<b> <%= will_paginate @active_profile,:next_label => "&gt;&gt;" ,:prev_label => "&lt;&lt;"%></b>

UPDATE

这是LOF文件的参数时,我做更新动作。

Started POST "/edms/overtime_definitions/update/249?employee_id=1353&flag=Re-Calculate" for 127.0.0.1 at 2014-04-09 15:12:45 +0530
  Processing by Edms::OvertimeDefinitionsController#update as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"NT+iv9FBJy87aabbNLALf50LkKv07yOR7xFA9Oe3ijs=", "overtime_definition"=>{"employee_id"=>"1353", "is_salary_basis"=>"1", "is_fixed_amount"=>"0", "half_day_amount"=>"", "full_day_amount"=>""}, "half_day_extra_duty_hours"=>{"year"=>"2000", "month"=>"1", "day"=>"1", "hour"=>"02", "minute"=>"02"}, "full_day_extra_duty_hours"=>{"year"=>"2000", "month"=>"1", "day"=>"1", "hour"=>"04", "minute"=>"04"}, "commit"=>"Update", "employee_id"=>"1353", "flag"=>"Re-Calculate", "id"=>"249"}

更新1

改变在与_form.rhtml隐藏字段这样

<%= hidden_field 'overtime_definition','employee_id',:value=>@employee.id %>

更新2

改变了@employee实例这样

@employee = Employee.find(params[:employee_id])

更新3

改变了的form_tag PARAMS在edit.rhtml这样

<%= form_tag :action => 'update',:id => @overtime.id,:employee_id => params[:employee_id],:flag=> params[:flag] %>

现在,它的转化率不employee_ididovertime_definition更新动作之后,但值不更新,虽然。

我怀疑任的edit form paramsedit/update控制器的操作可以出导致problem.Can't数字是什么。

任何帮助是极大的赞赏!

Answer 1:

def update
    @employee = Employee.find(params[:id])
    @overtime = OvertimeDefinition.find(params[:id])

所以,你的两款机型均具有完全相同的数据填充?


你可能会更好:

def update
    @employee = Employee.find(params[:id])
    @overtime = OvertimeDefinition.find(params[:employee_id])

如果您张贴params哈希表,你在你的日志中获取的,我会更好地帮助,但是这是你的问题的核心,采用Graeme McLean的信息太



文章来源: Update action seems to be doing nothing