我目前正在开发一个处理移动设备的gem。
控制器看起来像这样:
class PageController < ApplicationController
has_mobile_views
gem的代码如下所示:
module MobileViewsController
module ClassMethods
def has_mobile_views(args={})
class_eval do
if request.subdomain == 'm'
request.format = :mobile_html
layout Proc.new { |controller| controller.request.subdomain == 'm' ? 'mobile_application' : 'application'}
end
end
end
end
格式工作得很好,它呈现xxx.mobile_html。Haml文件很好,但不工作的是加载布局。它不加载任何布局
但是另一方面当我改变 controller.request.subdomain == 'm' ? 'mobile_application' : 'application'
controller.request.subdomain == 'm' ? 'xmobile_application' : 'application'
它抛出一个错误,xmobile_application不能被找到,所以它必须至少寻找它。
这个也不能用:
class PageController < ApplicationController
has_mobile_views
layout 'mobile_application'
但是当我把PageController改成
class PageController < ApplicationController
layout 'mobile_application'
布局正在被正确加载和渲染。
有没有人知道这里可能有什么问题,或者在宝石中改变什么以不搞砸布局?
假设有
-
mobile_html
在config/initializers/mime-types.rb
中注册的mime类型 - 你的移动布局在
app/views/layouts/mobile_application.mobile_html.erb
-
MobileViews
模块
ApplicationController
包含完成工作:
module MobileViewsController
def self.included(base)
base.extend ClassMethods
end
module ClassMethods
def has_mobile_views(args = {})
before_filter Proc.new {
request.format = :mobile_html if request.subdomain == 'm'
}
layout Proc.new { |c|
c.request.subdomain == 'm' ? 'mobile_application' : 'application'
}
end
end
end