新手问题 如果不想在注册页 render header 该如何操作?

levan · 2012年11月27日 · 最后由 Levan 回复于 2012年11月27日 · 2647 次阅读

在 application.html.erb 的

标签里: 我渲染了 header:
<%= render 'layouts/header' %>

可是,如果我在注册页不想看到这个 header,请问该怎么操作呢?

http://guides.rubyonrails.org/layouts_and_rendering.html 2.2.11.2

You can also tell Rails to render with no layout at all:

render :layout => false

反正把 2.2.11 看一遍总能找到你需要的方法

楼主的意图可能是 application.html.erb 本身还是要 render 的,只不过其中的一部分不用。

有几个方法,都不是太完美:

  • 单独定一个 layout 供其使用;为了重用 application 里的一些内容,可能需要把共用的内容再抽出来避免重复。
  • render 'layouts/header' 外面加上条件判断,不需要的页面不去用它。
  • 如果只有注册页面一个地方不想用它,则可以用 css 将 header 部分隐藏掉,然后在页面加载后用 js 把 header 从 DOM 中去掉。这样做的坏处是 view 还是要渲染出那一部分,会损失一部分性能。好处是如果只在这个特殊的页面不显示那部分,那特殊处理也限制在这一页面。

如果是我的话 我会做两个 layout 一个带 header 一个不带 header

@blacktulip @ashchan @fresh_fish 谢谢,用的是 devise 建立用户系统,如果要从 action 里声明 render 其他内容,貌似还要自建 devise 的相关 controller.

@blacktulip @ashchan @fresh_fish 搞定了,谢谢各位! 我的过程如下: 因为是用 devise,所以注册的 controller 都是 devise 内置的,如果想通过在 controller 里面声明自己想用的 layout 还必须自建一个 devise 的 controller:

class RegistrationsController < Devise::RegistrationsController
  layout "login"
  def new (这些可要可不要的)
     super
  end
end

之所以会用到这个,因为经常看到漂亮的登陆页,作者分享了整套的 css、js、html,所以想套着用一用。

devise 是不错,不过感觉项目开始就用,而不是中途修改

@davidqhr 嗯,小练手而已~

需要 登录 后方可回复, 如果你还没有账号请 注册新账号