1

我试图混淆所有离开服务器的 id,即出现在 URL 和 HTML 输出中的 id。

我编写了一个简单的 Base62 库,其中包含编码和解码方法。定义(或更好)覆盖 ActiveRecord 的 id 方法以返回 id 的编码版本,并调整控制器以加载解码后的资源params[:id]给我想要的结果。id 现在在 url 中采用 base62 编码,响应显示正确的资源。

现在我开始注意到通过has_many关系定义的子资源没有加载。例如,我有一个名为sUser的记录。has_many Post现在User.find(1).posts是空的,虽然有帖子user_id = 1。我的解释是 ActiveRecord 必须将user_idofPost与我已经覆盖的方法 id进行User比较,而不是与self[:id]. 所以基本上这使我的方法毫无用处。

我想要的是obfuscates_id在模型中定义类似的东西,其余的将被处理,即在适当的位置进行所有编码/解码并防止服务器返回 id。

是否有任何可用的宝石或有人暗示如何做到这一点?我敢打赌我不是第一个尝试这个的人。

4

1 回答 1

3

您所描述的听起来像是 URL slug 的专门应用程序。看看像acts_as_sluggable 或friendly_id 这样的插件。另请查看在您的用户模型上覆盖 to_param 方法。

也许从这里开始:Rails 的最佳永久链接

于 2010-05-11T22:33:57.343 回答