布局呈现不正确

时间:2013-09-27 07:52:31

标签: ruby-on-rails ruby

我有一个页面,可以在推荐控制器的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)

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

3 个答案:

答案 0 :(得分:2)

我倾向于认为layout()电话会覆盖之前的电话。在这种情况下,您为layout()拨打的最后一次:new电话会覆盖:my_testimonials的电话。

您还可以choose the layout at runtime

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

<强>更新

The code建议他们覆盖之前的通话。因此,调用layout "layouts/shares", only: [:new]实际上是要对:new和“应用程序”使用“共享”。

答案 1 :(得分:0)

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

因此,当你指定'layouts / frame'时,rails会查找'app / layouts / layouts / frame',这显然是找不到的。

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

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

答案 2 :(得分:0)

变化

layout "layouts/frame"

layout 'frame'

我认为这应该有用。