为什么这会导致 :show 根本没有布局:layout 'admin', : except => [:展示]

发布于 2024-12-08 00:19:32 字数 160 浏览 0 评论 0原文

为什么这会导致 :show 根本没有布局:layout 'admin', : except => [:show]

这是预期的行为吗?我被迫放置渲染:layout => 'application' 在一个空的 def 显示结束中。

显示操作不应该默认为基本布局吗?

why does this cause :show to get no layout at all: layout 'admin', :except => [:show]

Is this the intended behavior? I'm forced to put a render :layout => 'application' in an otherwise empty def show end.

Shouldn't the show action default to the base layout?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

稳稳的幸福 2024-12-15 00:19:32

这实际上让我有点惊讶,我不得不去来源检查。答案是否定的,它确实/不应该默认为应用程序布局。相反,传递的条件用于确定操作是否具有布局,因此混合方法的名称action_has_layout? (Rails 3)。

我有一半期望它的行为类似于 respond_to,您可以多次调用它来为不同的操作建立条件。

在任何情况下,您都可以通过向包含您的逻辑的 layout 发送一个方法(通过过程或符号引用方法)来轻松处理此问题,而不是简单地定义一个空操作来呈现不同的布局。

例如:

layout :determine_layout

...

def determine_layout
  # show gets application, the rest get admin
  params[:action] == 'show' ? 'application' : 'admin'

  # or, returning true would probably do it (and be more flexible in case 
  # the rest of your app swapped layouts to something other than application)
  params[:action] == 'show' || 'admin'
end

This actually surprised me a bit and I had to go to the source to check. The answer is no, it does/should not default to the application layout. The conditions passed instead are used to determine if the action has a layout at all, hence the name of the mixed in method action_has_layout? (Rails 3).

I'd half expected it to behave like respond_to, which you can call multiple times to build up the conditions for different actions.

In any case you can easily handle this by sending a method to layout containing your logic (via a proc or a symbol referencing method), rather than defining an empty action simply to render a different layout.

For example:

layout :determine_layout

...

def determine_layout
  # show gets application, the rest get admin
  params[:action] == 'show' ? 'application' : 'admin'

  # or, returning true would probably do it (and be more flexible in case 
  # the rest of your app swapped layouts to something other than application)
  params[:action] == 'show' || 'admin'
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文