我有一个带有布局的PagesController' pages.html.erb'指定。
class PagesController < Spree::StoreController
layout 'pages'
respond_to :html
def lifestyle
render 'lifestyle'
end
def co_step_1
render 'co_step_1'
end
def co_step_2
render 'co_step_2'
end
end
是否可以在PagesController中使用另一种使用不同布局的方法?
换句话说,我想在另一种方法中覆盖layout 'pages.html.erb'
。
答案 0 :(得分:5)
其他人的答案有点不同。不需要之前的操作或类似操作,只需使用layout
和方法来区分要使用的布局,例如:
class PagesController < Spree::StoreController
layout :resolve_layout
respond_to :html
def lifestyle
render 'lifestyle'
end
def co_step_1
render 'co_step_1'
end
def co_step_2
render 'co_step_2'
end
private
def resolve_layout
action_name == 'pages' ? 'pages' : 'custom_layout'
end
end
或者您想用什么逻辑来决定使用哪种布局。
答案 1 :(得分:1)
是。如果需要,您可以设置每个控制器的布局。
def some_special_method
render layout: "special_layout"
end
Rails指南中有哪些内容非常有用:http://guides.rubyonrails.org/layouts_and_rendering.html#using-render
答案 2 :(得分:1)
是的,您可以指定布局选项
def my_new_layout
render layout: "my_new_layout"
end
答案 3 :(得分:1)
您还可以添加在每个操作之前运行的方法,以确定布局,例如
class PagesController < Spree::StoreController
before_action :set_layout
respond_to :html
def lifestyle
render 'lifestyle'
end
def co_step_1
render 'co_step_1'
end
def co_step_2
render 'co_step_2'
end
private
def set_layout
%w(co_step_1 co_step_2).include?(params[:action]) ? "pages" : "other"
end
end