我正在尝试模糊离开服务器的所有ID,即ID出现在URL和HTML输出中。
我写了一个简单的Base62 lib,它有方法编码和解码。定义或更好地覆盖ActiveRecord的id方法以返回id的编码版本,并调整控制器以使用解码的params[:id]
加载资源,从而获得所需的结果。现在,id在URL中编码为base62,响应显示正确的资源。
现在我开始注意到通过has_many
关系定义的子资源没有加载。例如我有User
has_many
个名为Post
的记录。现在User.find(1).posts
为空,但有user_id = 1
的帖子。我的解释是,ActiveRecord必须将user_id
的{{1}}与Post
的{strong>方法 id
进行比较 - 我已经覆盖了 - 而不是与User
比较。所以基本上这会使我的方法无用。
我想要的是在模型中定义self[:id]
并且其余部分将被处理,即在适当的位置进行所有编码/解码并防止id返回服务器。
有没有可用的宝石,或者有人有提示如何实现这一目标?我敢打赌,我不是第一个尝试这个的人。
答案 0 :(得分:3)
您所描述的内容听起来像是一个URL slug的专门应用程序。看看acts_as_sluggable或friendly_id等插件。另请参阅覆盖User模型上的to_param方法。
也许从这里开始:Best Permalinking for Rails