无法使编辑功能正常工作 [英] Cant get the Edit function Working

查看:23
本文介绍了无法使编辑功能正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个模型 EmployeeOvertime Definition 关联是这样设置的

I have two models Employee and Overtime Definition The Associations are set like this

员工

class Employee < ActiveRecord::Base

has_many :overtime_definitions

加班定义

class OvertimeDefinition < ActiveRecord::Base

belongs_to :employee

我为员工创建了一个加班定义,看起来一切正常.但是我在为员工编辑相同的定义时遇到了麻烦.

I created an Overtime definition for an employee and it all looks fine.However I'm having trouble with editing the same for an employee.

overtime_definitions__controller:

    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_id])
    @employee = Employee.find(params[: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

在编辑方法中尝试过这些

Tried with these in the edit method

  1. @overtime = OvertimeDefinition.find(params[:id][:employee_id])

#gives me can't convert Symbol into Integer 错误.

#gives me can't convert Symbol into Integer error.

@overtime = OvertimeDefinition.find(params[:id])

#gives me Couldn't find OvertimeDefinition with ID=1353 错误.实际上 1353 是该员工的 ID.

#gives me Couldn't find OvertimeDefinition with ID=1353 error.Actually 1353 is the id of that employee.

3.@overtime = OvertimeDefinition.find(params[:employee_id])

#gives 我找不到没有 ID 的 OvertimeDefinition 错误.

#gives me couldn't find OvertimeDefinition without an ID error.

我的_search_overtime_employee_list 有这些链接,用于新建和编辑操作

My _search_overtime_employee_list having these links for new and edit actions

<%=link_to "Calculation" ,:action => "new",:id=>employee.id, :flag=>"Calculation" %>

<%= link_to "Re-Calculate",:action => "edit",:id=>employee.id,:flag=>"Re-Calculate" %>

new.rhtml

<%= form_tag :action => 'create' do %>
<%= render :partial =>'form'%>
<center>
    <%= submit_tag "Save",:onclick=>"return validate()",:class=>"buttons"%>
</center>
<% end %>
<%= link_to "Back" ,:action => "search_overtime" %>

edit.rhtml

<%= form_tag :action => 'update', :id=>@employee.id,:flag=> params[:flag],:value=>params[:id] %>
<%= 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>

我刚刚完全失去了进行编辑操作的工作.非常感谢任何帮助!

I just lost out here completely in getting that edit action work.Any help is greatly appreciated!

推荐答案

您当前的 edit 链接是:

<%= link_to "Re-Calculate",:action => "edit",:id=>employee.id,:flag=>"Re-Calculate" %>

在您的编辑操作中:

@overtime = OvertimeDefinition.find(params[:id][:employee_id]) ## 给我无法将符号转换为整数错误.

@overtime = OvertimeDefinition.find(params[:id][:employee_id]) ## gives me can't convert Symbol into Integer error.

根据编辑链接,您直接在查询参数中传递 :id,您可以将其作为 params[:id] 访问.在你的 params 散列中没有 params[:id][:employee_id] 所以当你说 params[:id][:employee_id] Ruby 试图转换 :employee_id 到一个整数,它是一个符号.因此,错误.

As per the edit link, you are directly passing :id in query params which you can access as params[:id]. There is no params[:id][:employee_id] in your params hash so when you say params[:id][:employee_id] Ruby tries to convert :employee_id to an integer which is a symbol. Hence, the error.

我认为您应该从您的链接中在 :id 中传递 OvertimeDefinition 记录的 id.并以

I think you should be passing id of OvertimeDefinition record in :id from your link. And access it as

@overtime = OvertimeDefinition.find(params[:id])

在控制器的动作中.

@overtime = OvertimeDefinition.find(params[:id]) ## 给了我不能找到 ID=1353 的 OvertimeDefinition 错误.实际上 1353 是那个员工.

@overtime = OvertimeDefinition.find(params[:id]) ## gives me Couldn't find OvertimeDefinition with ID=1353 error.Actually 1353 is the id of that employee.

这是因为您在 params[:id] 中传递了 employee id 所以显然这行不通.您需要在此处传递 OvertimeDefinition id.

This is because you are passing employee id in params[:id] so obviously this will not work. You need to pass OvertimeDefinition id here.

@overtime = OvertimeDefinition.find(params[:employee_id]) ## 给我找不到没有 ID 错误的 OvertimeDefinition.

@overtime = OvertimeDefinition.find(params[:employee_id]) ## gives me couldn't find OvertimeDefinition without an ID error.

您没有在 edit 链接内的查询参数中传递任何 :employee_id.因此,params[:employee_id] 将为 nil 并且 find 方法失败,因为您没有将任何 id 传递给它.

You are not passing any :employee_id in query params within edit link. So, params[:employee_id] will be nil and find method fails because you didn't pass any id to it.

更新您的编辑链接如下:

<%= link_to "Re-Calculate",:action => "edit",:id=> @overtimedefinition.id , :employee_id => employee.id,:flag=>"Re-Calculate" %> 

用适当的 OvertimeDefinition 记录 id 替换 @overtimedefinition.id.由于您没有共享代码,我不知道 OvertimeDefinition 变量的名称.

Replace @overtimedefinition.id with appropriate id of OvertimeDefinition record. As you have not shared the code, I don't know the name of OvertimeDefinition variable.

将您的 edit 操作更新为:

Update your edit action as:

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

这篇关于无法使编辑功能正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆