【问题标题】:Ruby on Rails, How to make a controller render different page without redirect?Ruby on Rails,如何让控制器在不重定向的情况下呈现不同的页面?
【发布时间】:2011-04-09 02:26:05
【问题描述】:

假设我们有以下页面 剪辑/显示/111 图片/节目/222 声音/表演/333 其中 111,222 和 333 是不同贡献的 ID

我开发了一个名为“show”的新控制器,它将检测 ID 并重定向到正确的控制器 show/show/111 将重定向到 clip/show/111 等等

我想要的是在不重定向的情况下呈现页面clip/show/111,这意味着浏览器上的URL仍然会显示“show/show/111”,但实际上会呈现“clip/show/111”

我该怎么做?

谢谢大家 华尔

【问题讨论】:

  • 我认为你把最后一点弄错了...... > 应该是 >
  • 是的,谢谢克里斯,它现在改变了。

标签: ruby-on-rails ruby redirect render


【解决方案1】:

听起来您真正想做的是为您的某些路由创建别名,以便您可以从不同的 URL 结构访问相同的功能。如果是这种情况,创建一个将其所有工作委托给另一个控制器的整个控制器将是代码异味(功能嫉妒)。

您可能想要做的是为“show/”定义一些额外的路由,这些路由只是重复使用相同的 Clip 控制器。只需执行以下操作即可完成此操作:

# routes.rb
# ...
# For Rails 2
map.resources "show", :controller => "clip"

# For Rails 3
resources "show", :controller => "clip"

【讨论】:

  • 我也知道你说过你不想重定向,但值得一提的是 Rails 3 路由器允许你直接从 routes.rb 文件重定向。查看guides.rubyonrails.org/routing.html#redirection 了解更多信息。
  • 我不能使用这样的资源,因为如果它是剪辑、图像等,路由不知道贡献类型,在我的显示控制器中,我进行某些查询以了解传递的 ID 类型并渲染控制器/相应地采取行动。
猜你喜欢
  • 1970-01-01
  • 2010-11-04
  • 1970-01-01
  • 1970-01-01
  • 2013-04-03
  • 2012-04-10
  • 1970-01-01
  • 2020-03-19
  • 1970-01-01
相关资源
最近更新 更多