0

もう 1 つの初心者の質問です。sick_days、sick_days_used、vacation_days、vacation_days_used 属性のデフォルトを正しくゼロに設定する方法を教えてください。新しい従業員を作成するときに、デフォルトで nil になり、アプリがクラッシュしていると思います。

これが私が得ていたエラーです:

Employees#index の NoMethodError

/Users/ryrythefrenchfry/rails_projects/time_tracker/app/views/employees/index.html.erb を表示して、24 行目が発生しました:

undefined method `-' for nil:NilClass 抽出されたソース (24 行目あたり):

21:     <td><%= employee.first_name + " " + employee.last_name %></td>
22:     <td><%= employee.hire_date %></td>
23:     <td></td>
24:     <td><%= employee.remaining_sick_days %></td>
25:     <td></td>
26:     <td><%= employee.remaining_vacation_days %></td>
27:     <td></td>

これが私のモデルです:

  class Employee < ActiveRecord::Base
    attr_accessible :employee_id, :first_name, :hire_date, :last_name, :sick_days, :vacation_days, :sick_days_used, :vacation_days_used

   def remaining_sick_days
      sick_days - sick_days_used
   end

   def remaining_vacation_days
      vacation_days - vacation_days_used
   end
 end

この厄介なコードモンキーを助けてくれてありがとう。

4

3 に答える 3

2

どうやら Employee オブジェクトの sick_days の値は nil です。これはおそらく、User オブジェクトを作成したときに初期化されなかったことが原因です。

于 2013-05-03T14:51:10.860 に答える
1

他の人が述べたように、sick_daysゼロです。「マイナス記号の左側のオブジェクトは nil です」とエラーを読み取ることができます。

次のようなことを試すことができます:

def remaining_sick_days
   if sick_days.nil?
     0
   else 
     sick_days - sick_days_used
   end
end
于 2013-05-03T17:23:51.403 に答える
0

Sick_days が指定されているかどうかを確認します。そのためにgem pryを使用することをお勧めします: http://railscasts.com/episodes/280-pry-with-railsとコード内:

   def remaining_sick_days
      binding.pry
      sick_days - sick_days_used
   end
于 2013-05-03T14:51:32.330 に答える