You can't redirect from server side (controller) within an ajax call. Everything retrieved via javascript returns to javacript; the web browser is expecting some javascript to be evaluated.
So you need to perform that redirect using javascript.
For example, you can change the before_action
(code not tested):
def require_login
unless current_user
if request.xhr?
flash[:notice] = "Please log in"
flash.keep(:notice) # Keep flash notice for the redirect
render js: "window.location = #{root_url.to_json}" # js to be evaluated
else
redirect_to root_url, :notice => "Please log in"
end
end
end