0

病気/休暇日と、従業員がいずれかのカテゴリでどれだけ利用できるかを計算するアプリを作成しようとしています。これが私の問題です:

私の見解では、持続時間の方程式は機能し、正しい数値が表示されますが、ビューに数学を入れましたが、これは悪いことだとわかっています。しかし、従業員クラスで期間方程式を使用しようとすると (数学をビューの外に移動できるように) 機能しません。これは、期間が何らかの理由で「nil」として保存されているためだと思います。フォームに入力した情報と一緒に他のすべてがデータベースに保存されているため、なぜそうしているのかわかりません。

期間がフォームに手動で入力されておらず、日付範囲に反応しているためでしょうか?

従業員モデルで期間を呼び出して、ビューから計算を取得したい場所は次のとおりです。

  def remaining_vacation_days
    vacation_days - @furlough.duration if @furlough.description == "Vacation"
  end

  def remaining_sick_days
     sick_days - @furlough.duration if @furlough.description == "Sick" 
  end

期間が定義されているモデルは次のとおりです。

class Furlough < ActiveRecord::Base

  attr_accessible :duration # and other stuff
  belongs_to :employee
  validates_presence_of :duration # and other stuff

  def duration
    only_weekdays(date_from..date_to) - psb_holidays
  end

  def only_weekdays(range)
    range.select { |d| (1..5).include?(d.wday) }.size    
  end

  def psb_holidays
    Holidays.between(date_from, date_to, :us, :observed).size
  end

end

私をつまずかせているのは、コンソールに次のように表示されることです。

1.9.3-p0 :008 > ryan = Furlough.find(18)
  Furlough Load (0.3ms)  SELECT "furloughs".* FROM "furloughs" WHERE "furloughs"."id" = ? LIMIT 1  [["id", 18]]
 => #<Furlough id: 18, duration: nil, date_from: "2013-12-20", note: "Christmas vacation!", created_at: "2013-05-08 14:33:03", updated_at: "2013-05-08 14:34:07", employee_id: 16, description: "Vacation", date_to: "2013-12-29"> 

ほら、それはゼロですが、私はこれを取得します:

1.9.3-p0 :009 > ryan.duration
 => 5 

私は途方に暮れています。

4

3 に答える 3

0

属性は、Furlough クラス自体ではなく、Furlough インスタンスの属性です。

于 2013-05-09T18:46:22.330 に答える
0

メソッドをクラス メソッドとして使用する場合は、メソッド定義に「self」を追加する必要があります。

def self.duration
  ...
end

その後、Furlough.duration を呼び出すことができます。

逆に (def duration)、インスタンス (特定の Furlogh インスタンス) でのみ呼び出すことができるインスタンス メソッドを定義しています。

于 2013-05-09T18:47:50.843 に答える