1
5
快速解决方案在routes.rb的底部有一个catch all route。在路由到的操作中实现所需的任何别名查找逻辑。 在我的实现中,我有一个表,它将定义的URL映射到控制器、操作和参数哈希。我只是将它们从数据库中提取出来,然后调用适当的操作,然后尝试呈现该操作的默认模板。如果操作已经呈现了某些内容,则会引发一个DoubleRenderError,我会捕获并忽略它。 您可以将这项技术扩展到您想要的复杂程度,尽管当它变得更复杂时,通过调整路由或Rails默认路由逻辑而不是通过自己重新实现所有路由逻辑来实现它更有意义。 如果找不到别名,可以根据需要抛出404或500错误。 记住的东西:
缓存:
如果事先不知道URL,页面缓存将成为一个绝对负担。记住,它是基于提供的URI缓存的,而不是基于
到
您将在缓存目录中找到一些很棒的alias.html。当您试图扫描foo的条时,除非您明确指定,否则不会扫描该文件。 容错: 检查以确保某人不会意外地在现有路由上使用别名。您可以通过强制所有别名进入一个已知不可路由的“目录”(在这种情况下,别名在文本上是唯一的,足以确保它们不会发生冲突),但对于我能想到的一些应用程序来说,这不是一个最理想的解决方案。 |
2
11
本, 我发现你已经用的方法是最好的。使用Rails3,您需要将代码稍微更改一下,以:
这就是全部。 |
3
2
首先,如其他人所建议的,在routes.rb的底部创建一个catch all route:
然后,在AliaseController中,可以使用“渲染”组件渲染别名操作:
|
4
0
我不确定我完全理解这个问题,但你可以用
如果你想优化它,你可以
|
Animesh Arya · 关联模型的Rspec 2 年前 |
Kellen · 查看$卷展栏功能列表 2 年前 |
Akshit Thakur Ak · 我怎样才能把铁轨停下来? 2 年前 |
solidsnake99 · Rails db:如何绕过验证 2 年前 |
Spyros · 从数组中删除nil值,并从引用数组中删除相应的项 2 年前 |
Pauli-E · 当div打开并滚动到屏幕上时,向div添加类 2 年前 |
ejoka · 如何使用Rails 7模型属性作为CSS标记值 2 年前 |