ajax调用期间在rails中使用render或redirect_to的问题

时间:2013-10-08 16:56:52

标签: javascript jquery ruby-on-rails ruby ajax

我正在尝试使用rails中的ajax请求(设置remote :: true for form)进行重定向。这是我的问题。

在控制器中,我有:

def create
  user = User.new
  user.attributes = params[:user]

   if user.save
    if request.xhr?
      flash[:notice] = "User successfully created"
      render js: %('#{user_url(user.id)}')
    end
  else
    if request.xhr?
      render partial: "form"
    else
      render action: 'new'
    end
  end
end

在模型中,

class user
  validates :total_amount, presence: true, numericality: {greater_than: 0}
end

在视图中,javascript是:

$("#new_user").bind("ajax:success", function(evt, data){
if(data.length < 300){
    window.location.replace(data.replace(/['\s]/gi, '')); # on success rendering the url. 
  }
  else {
    $("#errors").html($(data)); # if there are any errors, i have a div tag around form, which will replace the form html
  }
});

当我点击提交(这是一个ajax请求),为用户留下总金额为0.0(这是必需的)时,我得到验证错误,这是预期的行为(并显示验证错误,这是其他参与javascript)。 现在我输入金额为1.0,然后点击提交(这也是一个ajax请求)。它不会转到javascript中的if部分。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

您应该使用ajax:errorajax:success作为两个不同的回调,而不是检查数据的长度。错误回调显示错误,成功重定向。

回调:https://github.com/rails/jquery-ujs/wiki/ajax