2016-12-17 5 views
0

私はテーブルの列valid_toを持っています。これは、日付を表すはずです:エントリがデータベースに保存されてから30日です。 しかし、私はモデルでそのようなことをすることができますか? など。私はそのようなことをこの方法で行うことができ、コントローラに:Rails:モデルの日付属性をコールバックで変更できますか?例:Date.current + 1(d + other)

@baby = baby.create(baby_params. 
     merge(:valid_to => DateTime.current + 30) 

ビューでは、私は、フォームで隠しフィールドを使用することができます。

<%= f.hidden_field :valid_to => DateTime.current + 30 %> 

ので、モデルにそんなことをする方法はありますか?私はself.valid_to before_validationを定義しようとしましたが、役に立たなかった:irbのvalid_toカラムはまったくゼロです。追加するには:私は文字列ではなくdatetimeとして保存します。最後に

UPDATE

解決した

before_validation :set_valid_to, :on => :create 

def set_valid_to 
    self[:valid_to] = 30.days.from_now 
end 

とモジュールにこの事を住んでいたが、それはまた別の話だ...

+0

の可能重複http://stackoverflow.com/questions/4654457/how-to-add-10-days-to-current-time-in-rails – Brad

+0

@ブラッド、私は文句で脱出した場合申し訳ありませんが、irbに言及することで、私は計算ではなく、Baby.allを呼び出す、コンソールのdbエントリを観察することを意味しました。その質問は答えとして私の問題を解決するのに役立たなかった。 –

答えて

0

以下だけしたい場合は動作するはずですそれは最初のレコード作成時に行われました。保存するたびに更新したい場合は、before_createの代わりにbefore_saveを使用してください。 IRBで

class Baby < ActiveRecord::Base 
    before_create :set_valid_to 

    private 

    def set_valid_to 
    self.valid_to = 30.days.from_now 
    end 
end 
+0

hm ... "from_now"は "+"のところでは動作しません。奇妙な。ありがとう! –

+0

それはされている可能性があります。 「DateTime + 30」は30日ではなく30秒を追加します。 –

0

@baby = baby.create 
@baby.valid_to = Time.now + 30.days 
@baby.save 
関連する問題