0

所以我的问题是你将如何根据当前用户的角色来实现你的手写助手。

在请求时更改行为是否有效?例如,帮助程序以某种方式找出用户的角色,并包含正确的子模块?

module ApplicationHelper
    module LoggedInHelper
        # Some functions
    end

    module GuestHelper
        # The Same functions
    end

    # If User is Guest then include GuestHelper
    # If User is LoggedIn then include LoggedInHelper

end

这种方式效率高吗?是轨道方式吗?我有一大堆这样的函数,我不想将它们中的每一个都包装在 if 语句中

def menu_actions
    if current_user.nil?
        # User is guest
        { "Log in" => link_to "Login", "/login" }
    else
        # User is Logged In
        { "Log out" => link_to "Logout", "/logout" }
    end
end

感谢您的时间和想法。

4

1 回答 1

0

我不相信这会很好地工作。在开发模式下,它可能会运行,但在生产中,代码不会随每个请求从头开始加载。这意味着第一个请求会加载正确的模块,但之后下一个请求可能会加载第二个模块,然后就会发生冲突。

关于如何避免 switch 语句或 if 语句,我没有很好的答案,但我怀疑类继承系统将是替代模块包含的方法。

于 2010-04-06T20:58:17.923 回答