render action with custom layout page.
问题描述
默认情况下,controller 中action的layout都是application.html.erb
,也可以统一更换,在controller中,添加:
layout 'my_layout'
现在假定,针对action new,需要使用layout:my_layout, 其他的actions都采用application, 如何实现?
解决方法
我曾一厢情愿地以为应该可以这样, 在controller中添加如下语句👇:
layout 'my_layout', :only => :new
显然,一厢情愿的结果常常都面临着悲剧。
正确的脱坑方式是这样的👇:
在controller中定义一个private method, 然后在该method中进行设置:
layout :my_layout
.....
private
def my_layout
params[:action] == 'new' ? 'my_layout' : 'application'
end
如果是指定的多个action都是my_layout呢?
这么设置:
layout :my_layout
.....
private
def my_layout
%w[action1 action2 action3……].include?params[:action] ? 'my_layout' : 'application'
end
Ok。