JP *_*shy 2 ruby ruby-on-rails
我希望我的应用程序中的控制器不仅仅响应从它的路由发送的对象的id,而且实际上是一个sha1哈希,我已经生成了使用Digest::SHA1.hexdigest.
所以代替:
/client/invoice/1
Run Code Online (Sandbox Code Playgroud)
我希望网址类似于:
/client/invoice/0beec7b5ea3f0fdbc95d0
Run Code Online (Sandbox Code Playgroud)
在Rails中更改对象的URL通常涉及两件事:
首先,更改相关的控制器操作以使用以您希望的方式工作的查找程序.在您的情况下,您可能希望在Invoice模型中编写自定义查找器,例如:
def self.find_by_id_or_sha1(id)
Invoice.find_by_id(id) || Invoice.find_by_sha1(id)
end
Run Code Online (Sandbox Code Playgroud)
然后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
Run Code Online (Sandbox Code Playgroud)
(这假设您的发票的SHA1哈希值存储在sha1属性中.)
| 归档时间: |
|
| 查看次数: |
805 次 |
| 最近记录: |