呈现自定义布局而不是应用程序布局

问题描述:

在创建过程中发生错误时,将调用呈现新操作。我需要显示新的自定义布局。而是显示应用程序布局。如何解决这个问题?呈现自定义布局而不是应用程序布局

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 

+0

'在新动作中呈现布局:'theme_forest''是正确的。你有什么错误吗? – Vishal

+0

尝试将'format.html {render:new}'改为'format.html {render:new,layout:'theme_forest'}' – Pavan

正如我提到的,你应该改变

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 }