2

我有一个页面my_testimonials在推荐控制器的操作中显示我的推荐。

此操作的正确布局是,layouts/frame但我必须更改某些内容,因为现在它正在渲染layouts/application

这是控制器中指定的布局:

layout "layouts/frame", only: [:my_testimonials]
layout "layouts/shares", only: [:new]

这是控制台中的输出:

Started GET "/my_testimonials/c4ca4238a0b923820dcc509a6f75849b" for 105.228.65.202 at 2013-09-27 07:40:49 +0000
2013-09-27T07:40:49.470211+00:00 app[web.2]: Processing by TestimonialsController#my_testimonials as HTML
2013-09-27T07:40:49.686047+00:00 app[web.2]:   Rendered testimonials/_testimonial.html.erb (2.6ms)
2013-09-27T07:40:49.686200+00:00 app[web.2]:   Rendered testimonials/my_testimonials.html.erb within layouts/application (79.2ms)

推荐书正在显示,但布局不正确。正如我所说,它昨天还在工作,所以我一定改变了一些小细节或某些东西的顺序。

4

3 回答 3

2

我倾向于认为一个layout()电话会覆盖以前的电话。在这种情况下,layout()您最后一次调用 for:new覆盖了 for :my_testimonials

您还可以在运行时选择布局

layout :set_layout

protected

def set_layout
  case action_name.to_sym
  when :my_testimonials
    'frame'
  when :new
    'shares'
  else
    'application'
  end
end

或者指定每个操作的布局:

def my_testimonials
  respond_to do |format|
    format.html { render :layout => 'frame' }
  end
end

更新:

该代码表明他们确实会覆盖以前的调用。所以调用layout "layouts/shares", only: [:new]本质上是说使用“共享”:new和“应用程序”。

于 2013-09-27T08:48:16.657 回答
0

Rails 在 'app/layouts/' 文件夹中查找布局。见第 2.2.2 节

因此,当您指定“layouts/frame”时,rails 会查找“app/layouts/layouts/frame”,它显然无法找到。

将布局指令更改为以下内容:

layout "frame", only: [:my_testimonials]
layout "shares", only: [:new]
于 2013-09-27T08:12:02.313 回答
0

改变

layout "layouts/frame"

layout 'frame'

我认为这应该有效。

于 2013-09-27T08:15:25.113 回答