没有登录屏幕!
该站点的访问者应该能够在不登录的情况下创建小部件。
此小部件可公开访问,可通过简短的URL共享 要编辑此窗口小部件,您需要知道更长的管理URL。
show动作应该有一个带有短标记而不是id的URL:
widget_path(widget) # => /widget/abc123
编辑操作的网址应为长令牌而不是ID:
widget_path(widget) # => /widget/abcdefghijklmnop123/edit
生成令牌
我使用before_create
回调生成两个令牌,token
和admin_token
SecureRandom.urlsafe_base64
。
然后,要更改URL帮助程序以生成带有id的URL,我会覆盖模型中的to_param
方法以返回token
:
def to_param
token
end
现在,当我保存新记录时,会生成一个令牌并且url助手会返回这些:
widget_path(widget) # => /widget/abc123
edit_widget_path(widget) # => /widget/abc123/edit
我需要edit_widget_path
帮助器才能使用admin_token
字段。
我似乎无法找到这样做的方法
在一个理想的解决方案中,我希望这些版本的_url
版本也可以工作,它们应该在通常的位置(控制器和视图)中可用。
我找到的最接近的是在_path
中创建自定义_url
和ApplicationController
方法,但这似乎并不合适。
打开如何实现这一目标的建议 有没有办法使用Rails'用于生成URL帮助程序的现有机制?
我希望这是有道理的,请随时要求澄清。
谢谢!
答案 0 :(得分:0)
我不知道除继承外可以处理的任何rails机制。您可以实现一个子类并覆盖那里的to_param
方法。我认为这不值得这样做,因为你只想在这里处理1条路线。我想我会创建一个帮助方法来处理这种情况。
此处的另一个提示:您可以使用GIT使用的相同机制。创建一个UUID(长版本)并使用前X个数字来创建公共URL,只有完整的UUID是秘密的。这种情况在99.9%的情况下在GIT中有效,没有碰撞,所以它也适用于你。