我是教师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包含
这是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
答案 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
。