2011-07-27 12 views
4

私はユーザーの誕生日を取得するフォームを持っています。Railsの日付を変更する年

私は誕生日をとり、それを別の属性に保存したいが、今年を取る。

私はコールでこれを行うバック

モデルボード

before_save:set_delivery_date

def set_delivery_date 

self.delivery_date = self.birthday 
self.delivery_date.change(:year => Time.now.year) 
end 

の誕生日は1920年7月27日

これは変更していないようです日付。

誰でもこの方法を知っていますか?

更新

私は、データベースに新しい日付を見ることができ、次の作品:私はRSpecのテストをしようか、私は、コンソールでそれをしようとすると

self.deliver_on = self.birthday.change(:year => Time.now.year) 

は、しかし、それは次のように生成エラー:

ArgumentError: invalid date 

なぜこの問題が発生しているのですか?

答えて

7

変更方法を変更一つ以上の要素を新しい日付インスタンスを返します。

def set_delivery_date 
    self.delivery_date = self.birthday 
    self.delivery_date = self.delivery_date.change(:year => Time.now.year) 
end 
0

コードが正しいようです。だから私はあなたのオブジェクトが保存されていない理由を確認します:

  • このオブジェクトは無効ですか?例えば。 object.valid?はfalseを返します。バリデーションチェックは保存前に行われます。
  • 保存していませんか?
0

のActiveRecordのDirty Object機能変更について知らない:

はこれを試してみてください。この問題を解決する方法は2つあります。

def set_delivery_date 
    self.delivery_date = self.birthday 
    self.delivery_date = self.delivery_date.change(:year => Time.now.year) 

    # Shorter 
    self.delivery_date = self.birthday.change(:year => Time.now.year) 
end 

または変更についてのActiveRecordを教えて:

def set_delivery_date 
    self.delivery_date = self.birthday 
    self.delivery_date_will_change! 
    self.delivery_date.change(:year => Time.now.year) 
end 
+0

私は両方のソリューションを試してみましたが、今私は無効な日付を取得しています。私は年を変えているので、非常に奇妙です。何か案は? – chell

+0

self.birthday.change(:year => Time.now.yearはinvalid_date例外を生成します – chell

+0

実際にテストを開始する前に、テストを投稿したり、おそらく 'birthday'を検証できますか? –

関連する問題