tôi viết một before_filter như thế này:cách đối phó với một cuộc gọi ajax trong before_filter
def authenticate_user
if request.xhr?
flash.now[:alert] = 'Error'
render :partial => "js_helpers/popover", :formats => :js
else
authenticate_user!
end
end
Tuy nhiên, nó không hoạt động như mong đợi. Tệp nhật ký hiển thị:
Rendered js_helpers/_popover.js.erb (0.1ms)
Filter chain halted as :authenticate_user rendered or redirected
Chức năng mã js là hiển thị khối bật lên hiển thị thông báo flash. nhưng có vẻ như mã js không hề vui mừng chút nào.
Vì vậy, tôi đã thay đổi cách của tôi:
def authenticate_user
if request.xhr?
flash.now[:alert] = 'Error'
render :js => "window.location = '/users/sign_up'"
else
authenticate_user!
end
end
Thay vào đó, tôi muốn chuyển hướng đến trang đăng ký.
Tuy nhiên, vẫn còn vấn đề. đèn flash dường như không hoạt động
Làm thế nào tôi có thể đạt được mục tiêu của tôi:
khi yêu cầu là một cuộc gọi ajax, thực hiện đến mã javascript hay redirect_to một trang mới. Trong cả hai điều kiện, tôi cần lưu trữ một số tin nhắn trong nháy mắt.
Ngoài ra, mã javascript rất dài nên tôi cần phải đặt nó vào một tệp. Làm thế nào tôi có thể sử dụng render: js để thực thi một javascript bên trong một tệp?
Các đường ray tiêu chuẩn chuyển hướng sẽ không hoạt động trên một cuộc gọi AJAX. – sockmonk