Rails:立即渲染并退出

时间:2011-04-04 13:23:22

标签: ruby-on-rails

使用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方法返回,治疗应被视为完整。

2 个答案:

答案 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种方法。