2012-03-11 23 views
1

私は、スタッフのデータ情報を保持する単純なRuby on Railsアプリケーションで作業していますが、就職日が間違いなく始まる必要があることを確認する方法が必要であることを認識しました。辞任の日。Ruby on Railsの日付問題

<div class="field"> 
    <%= f.label :date_of_employment %><br /> 
    <%= f.date_select :date_of_employment, :start_year =>1990 %> 
</div> 
<div class="field"> 
    <%= f.label :date_of_resignation %><br /> 
    <%= date_select :date_of_resignation, :start_year => Time.now %> 
+1

申し訳ありませんが、問題を説明できますか? –

+0

ナッシュ、私がしようとしていることは、あなたが雇用の日付を入力した後、辞任の日よりも早く日付を入力することはできません、それは何も制御されていないので、 –

+0

それを達成する唯一の方法は、いくつかのJavaScriptを書くことです。 –

答えて

2

を保存する前にデータを検証します。これは、あらゆる種類の時間/日付に基づくバリデーションを追加します。

1つのフィールドが前後にあることを検証することを含みます。たとえば、次のコマンドは、あなたのモデルで使用することができる。

validates_datetime :date_of_resignation, :after => :date_of_employment 

この宝石は仕事にはJavaScriptに依存しない、それは純粋なRubyの。

0

単純な解決策の1つは、フォーム送信時にこれら2つの日付を確認するためのjavascript関数を使用することです。この方法では、サーバーは無効なデータを処理する必要はありません。

データベースに保存する前に、Railsモデルレベルで検証を実行できます。例えば、モデル内のコード行は、あなたのプロジェクトに外部のコードを追加するために満足している場合は、validates timeliness宝石をチェックする必要があります

validate :verify_date 
def verify_date 
    errors.add("Invalid date") if date_of_resignation < date_of_employment 
end 
+1

ユーザーがJavascriptをオフにしてサーバー*が無効なデータを取得するとどうなりますか? –

+0

あなたのRailsモデルでも検証できます。何かが好きです:verfy_datesを検証します。ここで、verify_datesは関数で、errors.addを使ってエラーを渡します。 Railsはデータベースにデータを保存しません。あなたはyour_model_instance.errorsを使ってビュー内のエラーを返すことができます – Ethan

+0

@Ethan、モデル内で正しい方法をもっと理解してください。 –

関連する問題