我有一个页面,可以在推荐控制器的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)
正在显示推荐信,但布局不正确。正如我所说它昨天工作所以我必须改变一些小细节或某些东西的顺序。
答案 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'
我认为这应该有用。