2

我刚刚开始使用 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

我在 views/users/ 文件夹中创建了一个 update.js.erb 文件,并且很容易调试 @user var,但我不知道如何获取在我的方法上设置的状态代码。

对不起,如果这是一个愚蠢的问题,但我是 Rails 的新手,我正在努力遵循所有框架概念,我不知道创建对 Ajax 请求的响应的最佳实践。

我想要实现的是这样的:

#on my update.js.erb
if( status == 'created' ) {
   alert( 'Ok, created' )
} else {
   alert( 'Something wrong happened' )
}

我很感激任何帮助。

4

2 回答 2

1

选项 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
于 2016-12-31T22:03:00.210 回答
0

我会尝试这样做:

format.js {render json: {@user, status: :created, location: @user}}

于 2016-12-31T21:24:13.207 回答