3

レンダリングされるすべてのビューに表示したいビューがいくつかありますが、コードを複製したり仕様を破ったりしない限り、これを達成する方法を見つけることができないようです。

これが私の現在のコードで、すべてのビューに呼び出しを入れています:

def ImOnABoat::ビュー
  デフォルトのレイアウト
    html する
      head do title "Petstore" end
      本体はお譲り終了
    終わり
  終わり

  デフォルトナビゲーション
    " p "私たちの小さなペットショップへようこそ!
  終わり

  デフプードル
    ナビゲーション # すべてのビューでこれを複製する必要があります
    p "プードルを飼っています!"
  終わり

  defふわふわバニー
    ナビゲーション # すべてのビューでこれを複製する必要があります
    p "見に来てください -- なんてこった、ヴェロキラプトルです!"
  終わり
終わり

共通ブロックをボディの外にレンダリングできるようにすることもできますが、これは仕様に反しており、将来的にいくつかのスクレイパー スクリプトを恐ろしく壊してしまう可能性があります。

デフォルトのレイアウト
  def head do title "Petstore" end
  nav # これは <body> の中ではありません!
  def body do yield end
終わり
4

2 に答える 2

5

これは、Rails レイアウトを使用し、レイアウトでパーシャルをレンダリングすることで実現できます。そのような「構築」の必要性を減らし、管理を容易にします。

http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials

于 2010-03-07T13:15:30.747 に答える
2

これは単純な Ruby であるためnavigation、レイアウトでメソッドを呼び出すだけで済みます。

module ImOnABoat::Views
  def layout
    html do
      head { title "Petstore" }
      body do
        navigation
        yield
      end
    end
  end

  def navigation
    p "Welcome to our tiny petstore!"
  end

  def poodle
    p "We have a poodle!"
  end

  def fluffy_bunny
    p "Come see-- OH CRAP IT'S A VELOCIRAPTOR!"
  end
end
于 2010-07-25T11:50:37.637 に答える