Rails4:如何更改特定URL帮助程序的工作方式?

时间:2013-12-16 13:19:09

标签: ruby-on-rails-4

目标

没有登录屏幕!
该站点的访问者应该能够在不登录的情况下创建小部件。

此小部件可公开访问,可通过简短的URL共享 要编辑此窗口小部件,您需要知道更长的管理URL。

show动作应该有一个带有短标记而不是id的URL:

widget_path(widget)        # => /widget/abc123

编辑操作的网址应为长令牌而不是ID:

widget_path(widget)        # => /widget/abcdefghijklmnop123/edit

到目前为止我所拥有的:

生成令牌

我使用before_create回调生成两个令牌,tokenadmin_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中创建自定义_urlApplicationController方法,但这似乎并不合适。

打开如何实现这一目标的建议 有没有办法使用Rails'用于生成URL帮助程序的现有机制?

我希望这是有道理的,请随时要求澄清。

谢谢!

1 个答案:

答案 0 :(得分:0)

我不知道除继承外可以处理的任何rails机制。您可以实现一个子类并覆盖那里的to_param方法。我认为这不值得这样做,因为你只想在这里处理1条路线。我想我会创建一个帮助方法来处理这种情况。

此处的另一个提示:您可以使用GIT使用的相同机制。创建一个UUID(长版本)并使用前X个数字来创建公共URL,只有完整的UUID是秘密的。这种情况在99.9%的情况下在GIT中有效,没有碰撞,所以它也适用于你。