我刚刚开始使用Rails应用程序,我正在尝试在表单上使用Ajax,但是我不知道如何在JS.ERB中捕获状态代码文件。我正在关注本教程:http://guides.rubyonrails.org/working_with_javascript_in_rails.html
在我的用户控制器上,我有一个用于更新方法的代码:
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.js {}
format.json { render json: @user, status: :created, location: @user}
else
format.html { render action: 'edit' }
format.js {}
format.json { render json: @user, status: :unprocessable_entity }
logger.debug @user.response_errors
end
end
我在视图/用户/文件夹中创建了一个update.js.erb文件,并且很容易调试@user var,但我不知道如何在方法上设置状态代码。<<<<<<<<<</p>
对不起,如果这是一个愚蠢的问题,但是我是Rails的新手,我正在尝试遵循所有框架概念,而我不知道最适合对Ajax请求的回答的方法。
我要实现的目标是这样:
#on my update.js.erb
if( status == 'created' ) {
alert( 'Ok, created' )
} else {
alert( 'Something wrong happened' )
}
我感谢任何帮助。
选项1:检查 update.js.erb
内的有效性这是我在大多数情况下建议的选择。
update.js.erb
是一个ERB模板,其结果是可以在客户端上评估的JavaScript代码。在这种情况下,您可以使其看起来像:
<% if @user.valid? %>
alert('Ok, created');
<% else %>
alert('Something wrong happened');
<% end %>
警报显示的决定发生了服务器端。客户收到:
alert('Ok, create');
或
alert('Something wrong happened');
取决于@user
的状态。
选项2:两个单独的js.erb
文件
您可以将update.js.erb
分为两个文件。update.js.erb
应包含快乐路径代码:
alert('Ok, create');
update-error.js.erb
应包含一些错误处理:
alert('Something wrong happened');
然后,您决定在控制器中显示哪一个:
respond_to do |format|
if @user.save
# ...
format.js {}
# ...
else
# ...
format.js { render 'update-error' }
# ...
end
end
我会尝试做:
format.js {渲染json:{@user,status ::创建,位置:@user}}