-1

我正在我的应用程序中生成工资单。如何获得一个财政年度的所有工资单(2013 年 4 月至 2014 年 3 月)

员工.rb

class Employee < ActiveRecord::Base
  ..
  has_many :payslips, class_name: "Employee::Payslip", foreign_key: :employee_id
  ..
end

工资单.rb

class Employee::Payslip < ActiveRecord::Base
  ..
  belongs_to :employee
  ..
  validates_uniqueness_of :employee_id, :scope => [:month, :year]
end

我尝试了很多,但无法得到它。

4

2 回答 2

3

您似乎在工资单上有 :month 和 :year 属性,所以这应该很简单:

Payslip.where(:year => 2013)

编辑:对于所需的月份范围...

Payslip.where("((year = ? and month >= 4) or (year = ?+1 and month < 4))",2013, 2013)

这可能不适用于某些查询优化器,最好将工资单的日期表示为实际日期,而不是年份和月份数字。

于 2013-09-16T12:17:05.617 回答
1

您创建的每个活动记录对象都将具有称为“created_at”的字段...您可以使用此字段和 Time.now 作为获取工资单的限制:)

Time.now
=> 2013-09-16 17:37:48 +0530

1.year.ago Time.now
=> 2012-09-16 17:37:49 +0530

如果您使用 squeel,编写查询将是小菜一碟。

PaySlip.where{created_at < Time.now and created_at > (1.year.ago Time.now)}

我正在使用当前年份进行此查询...如果您想要特定年份的工资单,请分配变量并将它们放在您的查询中。

例如:Time.new(2012) => 2012-01-01 00:00:00 +0530

检查这个squeel...

于 2013-09-16T12:11:22.587 回答