渲染自定义布局而不是应用程序布局

时间:2017-07-19 05:16:57

标签: ruby-on-rails ruby-on-rails-4

在创建过程中发生错误时,将调用渲染新操作。我需要显示新的自定义布局。相反,它正在显示应用程序布局。如何解决这个问题?

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

2 个答案:

答案 0 :(得分:2)

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

format.html { render :new }

format.html { render :new, layout: 'theme_forest'}
  

在创建过程中发生错误时,渲染新操作即可   调用

<强>解释

没有!当您使用render时,只需加载模板(即new.html.erb)。它不会调用/触发相应的controller#method(即new)。因此,render layout: 'theme_forest'方法中的new 永远不会被称为

答案 1 :(得分:1)

您遇到的问题是您没有告诉渲染器使用您的自定义布局。

在新操作中,您已正确添加webElement result = driver.findElement(by.xpath("//div[@class='resultreset']/div")) String message = result.getText(); , 但是你在创建动作中没有做同样的事情。

在你的创建动作中,在else块中

render layout: 'theme_forest'

format.html { render :new } format.json { render json: @user.errors, status: :unprocessable_entity } 命令不会调用您的新操作,它只会渲染new.html.erb模板,因此您需要将此布局选项添加到render方法中,因为pavan的注释建议您是否要使用不同的布局:

render :new