-1

我是教师工资单控制器,使用对象获取 net_salary 时显示布尔值而不是它们的值。

def payslip_report
if params[:teacher_id] and params[:month_year].present?
   @month_and_year =   params[:month_year].gsub(' ','')
   @teacher_data   =   TeacherPayslip.where(:teacher_id => params[:teacher_id])
   @matched_records = @teacher_data.select{|t| t.salary_date.strftime("%B%Y") == @month_and_year}
   #returns an array of TeacherPayslip records with matching month and year
  if @matched_records.blank?
     raise "2" 
     else
     @report = @matched_records.first
     raise @report.net_salary.inspect

  end
end

结尾

在检查 @report.net_salary 时显示 true 。@report 包含基本、pf、da、net_salary 值。@pf = @report.pf 表示,我会得到 pf 值。但是当尝试获取 net_salary 时显示布尔值而不是浮点值。

raise @report.inspect 包含

在此处输入图像描述

这是教师工资单模型

 class TeacherPayslip < ActiveRecord::Base
    attr_accessible :teacher_id,:salary_date,:hra,:bonus,:pf,:da,
                  :special_allowance,:basic,:net_salary,:month_year

   #associations
   belongs_to :teacher


  #callbacks                
    after_create :net_salary

    def net_salary   
        @teacher_id = self.id
        @da  =  (self.basic * self.da)/100 
        @hra = (self.basic * self.hra)/100 
        @gs  = @da + @hra + self.basic
        @pf =  (@gs * self.pf)/100
        @netsalary = @gs - @pf + self.special_allowance + self.bonus
    @a = TeacherPayslip.find(@teacher_id)
    #raise @a.inspect
    @a.update_attribute('net_salary',@netsalary)
  end
end
4

1 回答 1

0

您已经覆盖了净工资方法,因此它不再返回列值。方法返回上一条命令返回的值。在这种情况下,您的 net_salary 方法会返回它是否设法更新模型。添加net_salary到最后,一切都应该恢复正常。

不过这里还有几点。Update_attribute保存对象,这可能会让任何调用它的人感到惊讶。它还跳过所有验证,这意味着:

t = TeacherPayslip.new
t.net_salary

会将空对象保存到 db.Use `assign_attributes net_salary: @netsalary' 代替。

此外,没有必要搜索新的 TeacherPayslip(它也会为新记录抛出异常),只需使用.self.assign_attributes...- 你甚至可以跳过self.

于 2013-10-12T10:48:21.673 回答