3

我希望在渲染的每个视图上都出现几个视图,但是由于没有重复代码或破坏规范,我似乎找不到实现此目的的方法。

这是我当前的代码,在每个视图中调用:

def ImOnABoat::Views
  定义布局
    html做
      头做标题“宠物店”结束
      身体确实屈服了
    结尾
  结尾

  定义导航
    p “欢迎来到我们的小宠物店!”
  结尾

  def 贵宾犬
    navigation # 必须在每个视图中复制它
    p “我们有一只贵宾犬!”
  结尾

  def 蓬松兔子
    navigation # 必须在每个视图中复制它
    p “来看看——哦,废话,这是一只迅猛龙!”
  结尾
结尾

我还可以通过允许公共块在身体外部渲染来使其工作,但这违反规范,并且可能最终会严重破坏一些刮板脚本。

定义布局
  def head do title "Petstore" end
  nav # 这不在 <body> 里面!
  def body 做 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 回答