Ruby on rails Rails加载覆盖其他辅助对象的辅助对象
这个问题分为两部分:Ruby on rails Rails加载覆盖其他辅助对象的辅助对象,ruby-on-rails,mobile,overriding,desktop,helpers,Ruby On Rails,Mobile,Overriding,Desktop,Helpers,这个问题分为两部分: 是否可以加载特定的帮助文件取决于您使用的平台 如何重写其他帮助文件中的函数 当我检测到使用手机的会话时,我想加载名为MobileHelper的帮助文件。在桌面平台中,我不想加载此文件 另一方面,我有一个带有show\u comments功能的WelcomeHelper。此MobileHelper必须更改此show\u comments功能的逻辑 现在,我提出了一个局部解决方案,如果检测到您正在使用手机,则在原始函数中使用其他名称调用mobile version函数 modu
module WelcomeHelper
def show_comments
return mobile_show_comments if user_agent.mobile?
# original code
end
end
module MobileHelper
def mobile_show_comments
# mobile code
end
end
我想要的最终版本是两个助手文件中的两个同名函数,其中一个文件必须仅在移动平台上加载
# check for the platform the user is on:
if request.user_agent.match /iphone|android/
# call your mobile helper's method here
else
# call default helper's method here
end
由于Rails启动时您的所有助手都已加载,因此您必须根据当前请求的用户代理将其分派给相应的助手。这有点过时,但您可能会发现有帮助。他们的方法是将.mobile注册为mime类型,然后通过目标视图处理桌面浏览器和移动浏览器之间的差异
另一种可能的策略是为路由命名,这样就有一组用于桌面的路由和另一组用于移动设备的路由。当用户第一次访问站点时,您应该将他们重定向到适当名称空间内的页面。使用这种方法,您可以创建DesktopBaseController和MobileBaseController(每个都继承自ApplicationController),其中包括适用于desktop/mobile的相应帮助程序。命名空间控制器可以从相应的桌面/移动基础继承。这可能会导致许多关于如何保持代码干燥的决策,但它为处理桌面和移动浏览中的差异提供了很大的灵活性(例如,寻呼机除了以不同方式呈现外,还可能获得较少的记录等)。如果项目没有实际完成,此解决方案将非常有用。将来我会尝试使用它。