获取元素在rails中显示true而不是float值

时间:2013-10-11 12:35:02

标签: ruby-on-rails

我是教师payslip控制器,而使用object获取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包含basic,pf,da,net_salary值。 @pf = @ report.pf意味着,我将获得pf值。但是当试图让net_salary显示布尔值而不是浮点值时。

raise @ report.inspect包含

enter image description here

这是TeacherPayslip模型

 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

1 个答案:

答案 0 :(得分: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