Espresso框架 - 一致的跨控制器渲染?

时间:2012-11-25 19:45:00

标签: ruby

我有一个基本的CMS,我非常在其中使用跨控制器渲染。

class Index < E
  map '/'

  # some actions

  def ad
    @steroids = render_p('anabolic-steroids/ads/left-banner')
    # some logic
  end
end

Steroids上课:

class Steroids < E
  map 'anabolic-steroids'

  # actions
end

查看文件夹:

view/
  |
  - anabolic-steroids/
      |
      - ads/
          |
          - left-banner.erb
  # other templates

一切运作良好,但现在客户需要anabolic-steroids网址 要重命名为steroids

为了完成这项工作,我重新映射了Steroids class:

map :steroids

并将view/anabolic-steroids/文件夹重命名为view/steroids/

Steroids控制器适用于新网址。

但现在所有其他呈现类固醇广告的控制器都被破坏了:(

我必须找到使用它的所有地方并重命名

render_p('anabolic-steroids/ads/left-banner')

render_p('steroids/ads/left-banner')

奇!

我还有其他许多地方,我正在使用像这样的跨控制器渲染。

任何避免无用重构的方法 当无辜的重命名请求来自客户时?

1 个答案:

答案 0 :(得分:2)

对于一个微不足道的问题有很长的描述:)(开玩笑,抱歉,好问题)

解决方案很简单,非常简单 - 永远不会使用字符串,你可以使用别的东西......

似乎你在文档上错过了这个 - “要渲染内部控制器的模板,将控制器作为第一个参数传递,将模板作为第二个参数传递。”

请参阅official docs here

为了解决任何重命名问题,请使用这样的跨控制器渲染:

render_p(Steroids, 'ads/left-banner')

现在你不应该担心“无辜的重命名请求”:)