Ruby& ActiveRecord:通过(唯一映射的)字符串引用整数字段

时间:2010-04-15 23:13:08

标签: ruby activerecord

虽然不是我的应用程序解释我的问题的简单方法是假设我正在运行URL缩短器。我不是试图找出我应该使用的下一个字符串作为URL的唯一部分,而是按整数索引我的所有URL并将数字映射到幕后的字符串,基本上只是将数字的基数更改为,比方说,62:az + AZ + 0-9。

在ActiveRecord中,我可以轻松地更改url_id字段的阅读器,以便它返回我的基本字符串62而不是存储在数据库中的数字:

class Short < ActiveRecord::Base
  def url_id
    i = read_attribute(:convo)

    return '0' if i == 0
    s = ''
    while i > 0
      s << CHARS[i.modulo(62)]
      i /= 62
    end
    s
  end
end

但是有一种方法可以告诉ActiveRecord接受Short.find(:first,:conditions=>{:url_id=>'Ab7'}),即。将“解码”逻辑放入我的Short ActiveRecord类?

我想我可以定义自己的def self.find_by_unique_string(string),但这感觉就像在某种程度上作弊!谢谢!

1 个答案:

答案 0 :(得分:0)

另一种方法是实际为unique_string的数据库表添加一个额外字段,然后使用before_save回调将编码值放入此字段中。然后,保存记录后,您就可以在任何find种类中使用该字段。