我有一个模型,它有一个唯一的标记,每次保存模型时都要更改。
我正在使用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。
我试图添加这一行:
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
但仍然没有工作,我怎么能在最后删除新行?
答案 0 :(得分:3)
首先,假设换行是100%假的,我会弄清楚它来自何处,然后将其删除。但如果由于某种原因这不是一个选项,以下gsub将起作用:
self.token = str.gsub(/\n$/, "")
如果它是字符串中的最后一个条目,那么只会删除换行符。要删除所有换行符,请使用:
self.token = str.gsub(/\n/, "")
更简单的是,rstrip方法将从字符串中删除尾随空格:
self.token = str.rstrip