2017-05-08 3 views
0

休暇申請用のアプリを作ろうとしていますが、問題に直面しています。私はVacationRequestと呼ばれるeモデルとVacationRequestのビューを表示します。ここrails4で休日を数えないようにする方法

VacationRequest.rbモデル

def skip_holidays 
    count1 = 0 
    special_days = Date.parse("2017-05-09", "2017-05-12") 

    special_days.each do |sd| 
    if ((start_data..end_data) === sd) 
     numero = (end_data - start_data).to_i 
     numro1 = numero - sd 
    else 
     numero = (end_data - start_data).to_i 
    end 
    end 
end 

VacationRequestのshow.htm.erb

私はこのエラーを示していると動作していないモデル

@vacation_request.skip_holidays 

からメソッドを呼び出しました。私を助けてください!

+0

質問に正確なエラーメッセージを追加してください。 – user000001

+0

ループ.eachはすべての配列を取っているのではなく、配列の最初の要素だけを取ります。これは、各要素の終わりを比較するのに適していると思います。 –

+0

エラー: –

答えて

0

これへの私のアプローチは、以下のようになります。日が特別な日である場合は、すべての要求された日付(範囲)を繰り返し処理

def skip_holidays 
    special_days = ["2017-05-09", "2017-05-12"].map(&:to_date) 
    accepted_days = [] 
    refused_days = [] 
    (start_data..end_data).each do |requested_date| 
    accepted_days << requested_date unless special_days.include?(requested_date) 
    refused_days << requested_date if special_days.include?(requested_date) 
    end 
    accepted_day_count = accepted_days.count 
    refused_days_count = refused_days.count 
end 

この方法では、確認 - もしそうなら、それを拒否し、それ以外の場合はそれを受け入れます。 最後に、受け入れられた日付と拒否された日付に関する統計情報を表示できます。

+0

フィリップは本当に助けてくれましたが、別の質問があります。この行は何ですか:.map(&:to_date):2017-05-09から2017-05-12までの日付の穴の範囲をスキップするためですこれらの2日間だけでなく、 –

+0

別のコメントでは、提供された2つの日付がカウントされないようにしたいと述べました。コード行はそれぞれの日付を取り、それらの 'to_date'メソッドを実行し、その結果を配列として返します。 –

+0

ありがとうフィリップ、あなたは本当に私を助けました。私はこの行が何をしているか知りたいと思っています:special_days = ["2017-05-09"、 "2017-05-12"]。map(&:to_date)は、この2つの日付だけを取るのではなく、2017-05-09から2017-05-12までの穴の範囲です。 –

0

複数の引数をコンストラクタに渡すことで日付範囲を作成することはできません。代わりに範囲を作成するために、二回のコンストラクタを呼び出します。

special_days = Date.parse("2017-05-09") .. Date.parse("2017-05-12") 

それとも、2つのだけの日付をしたい場合は、代わりに実行します。

special_days = ["2017-05-09", "2017-05-12"].map &:to_date 
+0

私はこの2つの日付がカウントされないようにしたいので、配列に入れて、これらの日がユーザーが選択してカウントしていない日の1つであるかどうかを確認したいが、この。 –

+0

これは、ユーザーがstart_dateとend_dateを選択するvacation_requestコントローラの形式です。 –

0

このDate.parse("2017-05-09", "2017-05-12") `tのは、最初のparamsを返し、範囲を作成します解析された:

initial = Date.parse("2017-05-09") 
final = Date.parse("2017-05-12") 

((initial)..final).each do |date| 
    #rules here. 
end 

#irb 
Date.parse("2017-05-09", "2017-05-12") 
=> Tue, 09 May 2017 

あなたはこのようにそれを行うことができます210

+0

ありがとうございました。私があなたに提案したように多くのことをありがとうが、まだ最初の日付しか表示していません。 –

+0

あなたは配列を休日を追加する方法を教えてくださいし、私はそれをしようとしているので、雇用が休暇の要求を行うときにカウントから除外することができます! –

関連する問題