获取状态:Rails上的.js.erb文件中的ajax响应代码

时间:2016-12-31 20:07:37

标签: ruby-on-rails json ruby ajax respond-to

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

我感谢任何帮助。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我会尽力:

  

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