Cant get the Edit function Working

后端 未结 1 1747
梦如初夏
梦如初夏 2021-01-21 14:00

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

Employee

class Employee < ActiveRecord         


        
相关标签:
1条回答
  • 2021-01-21 14:51

    Your current edit link is:

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

    In your edit action:

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

    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.

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

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

    in the Controller's action.

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

    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]) ## gives me couldn't find OvertimeDefinition without an ID error.

    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.

    Solution :

    Update your edit link as below:

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

    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.

    Update your edit action as:

      def edit
        @flag = params[:flag]
        @overtime = OvertimeDefinition.find(params[:id])
        @employee = Employee.find(params[:employee_id])
      end
    
    0 讨论(0)
提交回复
热议问题