2011-02-07 63 views
2

我有包含可選「expire_at」日期時間的帖子。Rails/ActiveRecord:如果未選中複選框,則將日期時間設置爲空

我試圖從我的表單保存這個日期時間,如果選中「custom_expire_at」複選框。如果未選中,則應將日期時間設置爲NULL。

我已經試過搗毀了expire_at參數,如果該複選框值不存在:

# Delete expiration dates if box is not checked 
if params[:item][:custom_expire_at] 
    params[:item].delete(:custom_expire_at) 
else 
    params[:item].delete(:expire_at) 
end 

然而,expire_at是多參數:

"expire_at(1i)"=>"2011", "expire_at(2i)"=>"2", "expire_at(3i)"=>"10", "expire_at(4i)"=>"21", "expire_at(5i)"=>"32" 

試圖避免徹底摧毀這個日期選擇通過jQuery - 而不是從參數中彈出。

總結: 1)如果我不需要它們,我怎麼去掉這些參數? 2)即使我設法去掉expire_at,我不知道如何將值設置回NULL。如果我將expire_at設置爲零,我的模型將忽略更新。

def ensure_expire_at_has_a_value 
    self.expire_at ||= nil 
    end 

任何想法?提前致謝!

回答

2

要解決,你可以使用delete_if刪除所有expire_at參數的多參數:

 
params.delete_if{ |key, value| key.match(/^expire_at/) } 
+0

工程就像一個魅力 - 謝謝。任何想法如何將我的日期時間設置回NULL? – jmccartie 2011-02-07 22:05:06

0

我建議你的模型做代替。爲custom_expire_at創建一個attr_accessor。確保你的表單與它相連接。 !如果custom_expire_at = '1'

順便說一句,你對'1'檢查,因爲這是複選框送回

self.expire_at = NULL:然後,創建一個before_validation方法,做到這一點。