处理:在Rails中使用mobylette的js格式

时间:2012-05-23 01:16:41

标签: ruby-on-rails ruby ruby-on-rails-3

我正在使用mobylette gem来管理:mobile格式视图。似乎工作正常除外:

我有一个渲染javascript文件的控制器(/app/views/photos/index.js.erb)。

class Photos < ApplicationController
  respond_to :js
  def index 
    ...
  end
end

如果我从桌面访问/photos/photos.js似乎工作正常(我看到.js输出)但是如果我从移动设备访问我得到以下错误

Template is Missing
Missing template photos/index, application/index with locale {:locale => [:en], :formats => [:mobile], :handlers => [:erg,:coffee,:haml]}. Searched in: *"/Users/user/site/app/views" * "/Users/user/.rvm/gems/ruby-1.9.2-p290/gems/devise-1.5.2/app/views" * "/Users/user/site/app/views"

我在application_controller.rb

中有以下代码
before_filter :set_request_format, :set_format_fallbacks

def set_request_format
  if is_mobile_request? && request.format.to_s == "text/html"
      request.format = :mobile
  elsif is_mobile_request? && request.format.to_s == "text/javascript"
      request.format = :mobilejs
  end
end

def set_format_fallbacks
  if request.format == :mobile
    self.formats = [:mobile, :html]
  elsif request.format == :mobilejs
    self.formats = [:mobilejs, :js]
  end
end

这在/config/initializers/mime_types.rb

Mime::Type.register_alias "text/html", :mobile
Mime::Type.register_alias "text/javascript", :mobilejs

出于某种原因,[:mobile]格式仍应呈现:js,而不是:mobilesjs,因为{{1}}不存在。

知道如何让这个工作吗?

2 个答案:

答案 0 :(得分:0)

也许不是最漂亮的解决方案,但我也没有找到一个mobylette支持的方式来做到这一点。 我使用了类似的方法,但是在你的before_filter中不能使用'request.format',我不得不使用'request.filtered_pa​​rameters [“format”]'。 还在寻找漂亮的版本。

答案 1 :(得分:0)

index.js.erb

改为

index.erb