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。

我试图添加这一行:

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

但仍然不起作用,我怎样才能删除最后的新行?

4

1 回答 1

3

首先,假设换行符是 100% 虚假的,我会弄清楚它来自哪里,然后将其删除。但是,如果由于某种原因这不是一个选项,则以下 gsub 将起作用:

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

如果它是字符串中的最后一个条目,那只会删除换行符。要删除所有换行符,请使用:

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

更简单的是,rstrip方法将从字符串中删除尾随空格:

self.token = str.rstrip
于 2011-08-23T19:10:02.803 回答