2

正如我习惯的那样,我在最近的 Rails 3.1rc1 应用程序中尝试了类似以下内容:

class Foo < ActiveRecord::Base
  require 'digest/sha1'

  belongs_to :user
  after_create :set_uuid

  def set_uuid
    self.update_attribute :uuid, Digest::SHA1.hexdigest("#{APP_CONFIG[:salt]}_#{self.class}_#{self.id}")[0..14]
  end

  def self.from_param param
    self.find_by_uuid! param
  end

  def to_param
    self.uuid
  end

end

不幸的是,这似乎不再有任何影响。当我要求:

http://localhost:3000/foos/3a2c4aa7d42adf3

发出以下 SQL:

SELECT "foos".* FROM "foos" WHERE "foos"."id" = ? LIMIT 1  [["id", "3a2c4aa7d42adf3"]]

为了实现我的目标,我还可以简单地:

set_primary_key 'uuid'

我知道,但这不是我想解决这个问题的方式。

你们有人对我有什么建议吗?提前谢谢。

菲利克斯

4

1 回答 1

0

你确定你的控制器在打电话Foo.from_param(params[:id])吗?如果你使用脚手架,它很可能是正常的Foo.find(params[:id])

于 2011-10-05T04:18:25.663 回答