2016-04-26 64 views
1

我需要製作一個方法,將日期呈現到創建日期之後一年的表格中。我試過了標題中列出的那條線,但那沒有奏效。我現在有一張桌子,旁邊列出「加入日期」,我希望它說「日期已過期」。這將從加入日期起一年。Created_at.1.year.from_now - Rails

例子:

class Subscriber < ActiveRecord::Base 
    validates :first_name, presence: true 
    validates :last_name, presence: true 
    validates :email, presence: true 
    validates :phone_number, presence: true 

    def date_joined 
    created_at.strftime("%-m/%-d/%-y") 
    end 

    def expiration_date 
    created_at.1.year.from_now 
    end 
end 

我應該如何格式化EXPIRATION_DATE方法。 date_joined正常工作。

回答

0

請記住,created_at直到保存模型纔會填充,您的計算將不會工作,直到那時。這可能是一個問題。

您所擁有的date_joined方法不應該存在。任何格式的關注應該是你的觀點的責任,因此,在推動這一邏輯有這樣的:

<%= model.created_at.strftime("%-m/%-d/%-y") %> 

你甚至可以定義使用的語言環境的日期格式爲demonstrated in this question,您可以添加這config/locales/en.yml

en: 
    date: 
    formats: 
     default: "%-m/%-d/%-y" 
    time: 
    formats: 
     default: "%-m/%-d/%-y %H:%M" 

然後你就可以在你的視圖作爲默認使用,而不需要任何特殊處理:

<%= model.created_at %> 

這將格式化所有時間都是您想要的方式,而不必爲每個模型定義特殊的格式化方法,然後記得調用它們。

當涉及到計算日期在未來,你可以在日期做數學題:

def expiration_date 
    (self.created_at || DateTime.now) + 1.year 
end 

如果模型尚未保存這甚至會工作。

3

您應該添加1.yearcreated_at時間對象:

def expiration_date 
    created_at + 1.year 
end 

格式化:

def expiration_date 
    (created_at + 1.year).strftime("%-m/%-d/%-y") 
end 

軌控制檯:

=> some_object.created_at 
=> Wed, 12 Apr 2016 17:37:12 UTC +00:00 
=> some_object.created_at + 1.year 
=> Wed, 12 Apr 2017 17:37:12 UTC +00:00 
=> (some_object.created_at + 1.year).strftime("%-m/%-d/%-y") 
=> "4/12/17" 
+0

兩者輸出相同)) – 7urkm3n

+0

@ 7urkm3n確實。固定。 –

+0

這很好用,但是當我嘗試格式化時間時,它給了我一個錯誤。你能告訴我如何格式化它與我列出的其他方法相同嗎? – Bitwise

0

我覺得你實際上是問錯了問題在這裏。而不是在Rails中實現這個功能,而是問一個Ruby問題,即「我如何處理Ruby日期時間對象之間的交互。」我建議你參考Ruby/Rails datetime對象,看看它們是如何工作的。

這就是說,我敢肯定別人會發布你想看到的答案。

+2

這應該是評論而不是回答... – 7urkm3n

+0

@CameronBass np,與ruby/rails玩得開心!我卡在爪哇(熔岩)土地現在:( – dtc