呈现自定义布局而不是应用程序布局
问题描述:
在创建过程中发生错误时,将调用呈现新操作。我需要显示新的自定义布局。而是显示应用程序布局。如何解决这个问题?呈现自定义布局而不是应用程序布局
def new
@user = User.new
render layout: 'theme_forest'
end
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
@user.add_role(COMPANY_ADMIN)
sign_in @user
format.html { redirect_to "/users",
notice: 'User was successfully created.' }
format.json { render json: @user, status: :created,
location: "/users" }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
末
答
正如我提到的,你应该改变
format.html { render :new }
到
format.html { render :new, layout: 'theme_forest'}
当错误发生时在创建过程中,使新的行动是 调用
说明:
没有!当您使用render
时,它只是加载模板(即new.html.erb
)。其将不会调用/触发对应的controller#method
(即,new
)。所以render layout: 'theme_forest'
中的new
方法在这种情况下永远不会被称为。
答
你的问题是,你讲的不是用你的自定义布局的渲染器。
在新操作中,您已正确添加render layout: 'theme_forest'
, 但是您在创建操作中没有这样做。
在你创建行动,在else块
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
的render :new
命令不调用你的新动作,它只是呈现new.html.erb模板,因此你需要在布局选项添加到渲染方法,帕文的评论暗示,如果你想使用一个不同的布局:
format.html { render :new, layout: 'theme_forest' }
format.json { render json: @user.errors, status: :unprocessable_entity }
'在新动作中呈现布局:'theme_forest''是正确的。你有什么错误吗? – Vishal
尝试将'format.html {render:new}'改为'format.html {render:new,layout:'theme_forest'}' – Pavan