2

私は基本的な 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-steroidsURL の名前を次のように変更することを希望しています。steroids

これを機能させるために、Steroidsクラスを再マップしました:

map :steroids

view/anabolic-steroids/フォルダの名前を に変更しましたview/steroids/

また、Steroidsコントローラーは新しい URL でうまく機能します。

しかし今、ステロイド広告をレンダリングしていた他のすべてのコントローラーが壊れています:(

そして、それが使用されているすべての場所を見つけて名前を変更する必要があります

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

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

奇数!

このようなクロスコントローラーレンダリングを使用している場所は他にもたくさんあります。

このような無害な名前変更要求が顧客から来た場合、無駄なリファクタリングを回避する方法はありますか?

4

1 に答える 1

2

少し些細な問題のかなり長い説明:)(冗談、申し訳ありませんが、良い質問ですが)

解決策は単純です。本当に単純です。何か他のものを使用できる場所では文字列を使用しないでください...

ドキュメントでこれを見逃したようです- 「内部コントローラーのテンプレートをレンダリングするには、コントローラーを最初の引数として渡し、テンプレートを2番目の引数として渡します。」

公式ドキュメントはこちら

したがって、名前変更の問題を乗り切るには、次のようなクロスコントローラー レンダリングを使用します。

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

これで、「無実の名前変更リクエスト」について心配する必要はありません:)

于 2012-11-25T20:05:22.150 に答える