gpt4 book ai didi

ruby-on-rails - 移动mime类型可以在Rails中退回到 “html”吗?

转载 作者:行者123 更新时间:2023-12-03 11:37:45 26 4
gpt4 key购买 nike

我在ApplicationController中使用以下代码(取自here)来检测iPhone,iPod Touch和iPad请求:

before_filter :detect_mobile_request, :detect_tablet_request

protected

def detect_mobile_request
request.format = :mobile if mobile_request?
end

def mobile_request?
#request.subdomains.first == 'm'
request.user_agent =~ /iPhone/ || request.user_agent =~ /iPod/
end

def detect_tablet_request
request.format = :tablet if tablet_request?
end

def tablet_request?
#request.subdomains.first == 't'
request.user_agent =~ /iPad/
end

这使我可以拥有诸如show.html.erb,show.mobile.erb和show.tablet.erb之类的模板,虽然很棒,但是存在一个问题:似乎我必须为每种mime类型定义每个模板。例如,即使未定义show.html.erb,但从iPhone请求“show”操作而未定义show.mobile.erb也会引发错误。如果缺少手机或平板电脑模板,我想简单地使用html模板。由于“mobile”在mime_types.rb中被定义为“text / html”的别名,因此似乎并不太牵强。

因此,有几个问题:
  • 我做错了吗?还是有更好的方法来做到这一点?
  • 如果没有,如果不存在手机或平板电脑文件,我可以让手机和平板电脑的mime类型回落到html吗?

  • 如果重要的话,我正在使用Rails 3.0.1。在此先感谢您提供任何指导。

    编辑:我忘了提一件事:我最终将转移到单独的子域(如您在示例中看到的注释),因此无论运行了哪种 before_filter,模板的加载实际上都需要自动进行。

    最佳答案

    Possible Duplicate of Changing view formats in rails 3.1 (delivering mobile html formats, fallback on normal html)

    但是,我在这个完全相同的问题上苦苦挣扎,并提出了一个非常优雅的解决方案,完全可以满足我的需求。这是我从其他帖子中得到的答案。

    我想我已经找到了最好的方法。我尝试过与您相同的事情,但是后来我想起在Rails 3.1中引入了template inheritance,这正是我们需要类似的东西才能起作用的原因。对于此实现,我真的不能称赞,因为Ryan Bates在railscasts链接中列出了所有实现。

    因此,这基本上就是它的运行方式。

    app/views中创建一个子目录。我标记了我的mobile

    将要覆盖的所有 View 模板嵌套在与Views目录中相同的结构格式中。 views/posts/index.html.erb -> views/mobile/posts/index.html.erb
    在您的before_filter中创建一个Application_Controller并为此做些事情。

     before_filter :prep_mobile
    def is_mobile?
    request.user_agent =~ /Mobile|webOS|iPhone/
    end
    def prep_mobile
    prepend_view_path "app/views/mobile" if is_mobile?
    end

    完成后,如果文件在移动设备上,则文件将默认为移动 View ;如果不存在移动文件,则将回退到常规模板。

    关于ruby-on-rails - 移动mime类型可以在Rails中退回到 “html”吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4062518/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com