【问题标题】:Middleman: How can I render a different partial for mobile device?Middleman:如何为移动设备渲染不同的局部?
【发布时间】:2026-02-17 01:50:01
【问题描述】:

我现在正在使用 Middleman 构建一个登录页面(我不熟悉后端的东西)。我将每个部分分成不同的部分(例如):

= partial "partials/_section-1"
= partial "partials/_section-2"
= partial "partials/_section-3"

如果用户通过手机浏览网站,我一直在尝试显示不同的部分:

= partial "partials/_section-1"
- if mobile_device?
  = partial "partials/_section-2-mobile"
- else
  = partial "partials/_section-2"
= partial "partials/_section-3"

有什么方法可以实现吗?可能类似于 Ruby 的助手:

def mobile_device?
    if session[:mobile_param]
      session[:mobile_param] == "1"
    else
      request.user_agent =~ /Mobile|webOS/
    end
end
helper_method :mobile_device?

谢谢!

【问题讨论】:

    标签: ruby-on-rails static middleman slim-lang


    【解决方案1】:

    您可以使用以下功能:

     def mobile_device?
       if session[:mobile_param]
         session[:mobile_param] == "1"
       else
         request.user_agent =~ /Mobile|webOS/
       end
    end
    

    此外,还有一个包含更多信息的 Railscast: http://railscasts.com/episodes/199-mobile-devices

    要获得更好的正则表达式,请使用以下站点:http://detectmobilebrowsers.com/


    既然你已经有了相同的脚本,你的问题在哪里?

    【讨论】:

    • 我做了,但它不适用于 Middleman。我每次都收到这个错误:undefined local variable or method 'session'
    【解决方案2】:

    Middleman 生成静态页面,因此在客户端访问站点时完全不涉及。因此,Middleman 无法做到这一点。

    您最好的选择是使用 css 或 javascript。

    【讨论】:

    • 是的。诚然。一开始我对中间人太有野心了:P