使用omniauth gem,无论提供者是什么,我都被迫为成功登录定义单个路由回调:
def auth_callback
auth_data = request.env['omniauth.auth']
if auth_data.has_key('something')
process_one(auth_data)
else
process_two(auth_data)
end
# No view is available here
end
def process_one
# do something then render view for process_one
return
end
def process_two
# do something then render view for process_two
return
end
如何阻止控制器返回auth_callback方法并尝试显示相应的视图(不存在)?一旦process_one或process_two方法返回,治疗应被视为完整。
答案 0 :(得分:79)
为什么不在这些方法中专门调用render
?
def process_one
# do something then render view for process_one
render :process_one and return
end
Rails应该检测到你已经运行它而不是再次尝试渲染。
答案 1 :(得分:1)
如果您想从方法链中返回,例如
$inc
会导致def a
...
b
...
render "smth"
end
...
def b
...
# render from some conditional from here
...
end
,这意味着您两次致电AbstractController::DoubleRenderError
。
您可以阅读此article以了解管理此类情况的4种方法。