我希望我的应用程序中的 Controller 不仅响应从它的路由发送的对象的 ID,而且实际上是一个 sha1 哈希,我使用 Digest::SHA1.hexdigest
生成.
所以代替:
/client/invoice/1
我希望 url 是这样的:
/client/invoice/0beec7b5ea3f0fdbc95d0
最佳答案
在 Rails 中更改对象的 URL 通常涉及两件事:
首先,更改相关的 Controller 操作以使用按您希望的方式工作的查找器。在您的情况下,您可能想在 Invoice 模型中编写一个自定义查找器,例如:
def self.find_by_id_or_sha1(id)
Invoice.find_by_id(id) || Invoice.find_by_sha1(id)
end
然后在您的 Controller 操作(显示、编辑、更新、销毁)中使用 Invoice.find_by_id_or_sha1(params[:id])
。
其次,更改生成的 URL 以遵循您的新设计(如果需要)。因此,如果您希望 link_to("Jan 1, 2010", @invoice)
转到 /client/invoice/0beec7b5ea3f0fdbc95d0
,请覆盖默认的 to_param
发票模型中的方法。例如:
def to_param
sha1
end
(假设您的发票的 SHA1 哈希存储在 sha1 属性中。)
关于ruby-on-rails - 用于对象路由的 rails sha1 哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1944116/