在创建过程中发生错误时,将调用渲染新操作。我需要显示新的自定义布局。相反,它正在显示应用程序布局。如何解决这个问题?
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 :(得分: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