2011-08-23 27 views
0

我有一個模型,它有一個唯一的標記,每次保存模型時都要更改。使用的before_filter不能刪除新行

我真的改變令牌,並且它的工作,問題是:

class Confirmation < ActiveRecord::Base 
    attr_accessible :item_id, :item_type 

    before_save :define_token 

    def to_param 
    token 
    end 

    private 
    def define_token 
     str = ActiveSupport::SecureRandom.base64(32).gsub("/","_").gsub(/=+$/,"") 
     self.token = Util.secure_hash("#{str} - #{Time.now.utc.to_s} - #{item_id}") 
    end 
end 
當我看到令牌

產生它給了我,並在最後一個\ n一個隨機字符串。

i`ve試圖加入這一行:

def define_token 
    str = ActiveSupport::SecureRandom.base64(32).gsub("/","_").gsub(/=+$/,"") 
    str = Util.secure_hash("#{str} - #{Time.now.utc.to_s} - #{item_id}") 
    self.token = str.gsub("\n", "n") 
end 

,但仍然不`噸的工作,我怎樣才能去掉末尾的新行?

回答

3

首先,假設換行符是100%虛假的,我會找出它來自哪裏,並將其刪除。但是,如果由於某種原因,這是不是一種選擇,下面GSUB將工作:

self.token = str.gsub(/\n$/, "") 

,如果它是字符串中的最後一個條目這將只刪除一個換行符。要刪除所有換行符,使用方法:

self.token = str.gsub(/\n/, "") 

更加容易,可rstrip方法將刪除從字符串結尾的空格:

self.token = str.rstrip 
+0

感謝,它magicaly工作,不會對代碼進行任何更改。不管怎麼說,還是要謝謝你 –