我正在尝试使用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部分。
我在这里做错了什么?
答案 0 :(得分:0)
您应该使用ajax:error
和ajax:success
作为两个不同的回调,而不是检查数据的长度。错误回调显示错误,成功重定向。