我使用mobile fu gem进行一些用户代理检测,以便我可以根据客户端提供.html或.mobile扩展模板,
现在,这部分工作真的很好,但我不喜欢那个视图文件夹变得有点杂乱,有两倍的文件,即。
app/views/profiles/show.mobile.haml
app/views/profiles/show.html.haml
app/views/profiles/edit.mobile.haml
app/views/profiles/edit.html.haml
等等
我想要的是:
app/views/profiles/html/show.html.haml
app/views/profiles/html/edit.html.haml
和
app/views/profiles/mobile/show.mobile.haml
app/views/profiles/mobile/edit.mobile.haml
让Rails根据请求自动查看文件的正确文件夹/目录。 这可能吗?
也许这很容易做到,如果这是一种开箱即用的行为,请告诉我。
谢谢
答案 0 :(得分:2)
Rails 4.1有一个名为ActionPack Variants的新内置功能,它可以检测用户代理(如移动fu gem)。
基本上,您可以在ApplicationController中添加它:
before_action :detect_device_format
private
def detect_device_format
case request.user_agent
when /iPad/i
request.variant = :tablet
when /iPhone/i
request.variant = :phone
when /Android/i && /mobile/i
request.variant = :phone
when /Android/i
request.variant = :tablet
when /Windows Phone/i
request.variant = :phone
end
end
我们假设你有一个ProfilesController。现在你可以这样做:
class ProfilesController < ApplicationController
def index
respond_to do |format|
format.html # /app/views/profiles/index.html.erb
format.html.phone # /app/views/profiles/index.html+phone.erb
format.html.tablet # /app/views/profiles/index.html+tablet.erb
end
end
end
回到你的问题:如果你想在不同的文件夹/目录中查找文件,你可以这样做:
format.html.phone { render 'mobile/index' } # /app/views/mobile/index.html+phone.erb
还有一个显示如何使用它的good tutorial。