【问题标题】:Rails - layout won't apply to desired actionRails - 布局不适用于所需的操作
【发布时间】:2016-05-27 21:45:46
【问题描述】:

我正在尝试将特定布局应用于我的 Rails (v. 4.2.5) 应用程序的控制器中的一个操作,但它不起作用。奇怪的是(或者可能不那么奇怪),如果该操作是“资源”路线的一部分,则布局将用于呈现操作,但不适用于我需要此操作的操作,这不是 ' 的一部分资源'。对不起,如果这看起来令人困惑,这里是相关的代码和解释......

routes.rb - 这里有我的entries 控制器的标准资源路由,以及“输入”的附加路由

get '/entries/inputs' => 'entries#inputs.html'
resources :entries

entries_controller.rb - 我正在尝试将 layouts/cached.html.erb 应用于“输入”操作

class EntriesController < ApplicationController
    layout "cached", only: [:inputs]

    def inputs
    end

    def index
        @entry = Entry.all
    end
end

事实上,layouts/cached.html.erb 不会应用于“输入”操作。 然而,如果我把控制器中的第二行代码换成这个:

layout "cached", only: [:index]

“索引”操作的布局已成功呈现。

我在这里缺少什么?为什么这种布局会应用于一个动作而不适用于另一个?

【问题讨论】:

  • 如果这被否决,我会很高兴知道原因。

标签: ruby-on-rails


【解决方案1】:

使用此代码:

class EntriesController < ApplicationController
layout :resolve_layout

def inputs
end

def index
    @entry = Entry.all
end

private

def resolve_layout
 case action_name
when "inputs"
  "cached"
else
  "application"
end
end
end

Routes:

get 'entries/inputs' => 'entries#inputs'

【讨论】:

  • 嗯...谢谢,但这仍然存在同样的问题。它不会使用 when "inputs" 的布局,但如果我将其切换到 when "index",它会。
  • 谢谢!这是一个非常令人沮丧的问题,您确实帮助我清除了阻碍应用开发重要一步的愚蠢障碍。
猜你喜欢
  • 2016-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
  • 2016-04-11
  • 2017-02-16
相关资源
最近更新 更多