0

デスクトップからは正常にindex.js起動されますが、Mobile Safari から開こうとすると次のエラーが発生します。

ActionView::MissingTemplate: Missing template ads/thumbs/index, application/index with {:locale=>[:es, :en], :formats=>[:mobile], :handlers=>[:erb, :builder, :haml]}. Searched in: * "/app/app/views" * "/app/vendor/bundle/ruby/1.9.1/gems/devise-1.5.2/app/views" * "/app/app/views"

:formats=>[:mobile]フォルダにそのようなファイルがないのに、なぜ探しているのかわかりません。

携帯電話からデバイスでサインインしようとすると、同じことが起こります。存在しないファイルをレンダリングしようとしていcreate.mobile.hamlます。

PS見つからない場合にデフォルト ビューをフォールバックするビューを作成する方法はありますか? :mobile:htmlそれはトリックになります。

4

2 に答える 2

0

一般に、コンテンツタイプ固有のビューで応答する必要があります。この場合、この短期的な問題を回避する簡単な方法は、名前をに変更するindex.jsことindex.mobile.jsです。

Railsは、要求されたコンテンツタイプに固有のビューをレンダリングしようとします。たとえば、index.html.hamlhtmlが要求された場合やshow.json.haml、jsonを要求した場合などです。この場合、要求されたコンテンツタイプはです:mobile

長期的には、さまざまなコンテンツタイプが要求されたときに返送されるビューを開発する必要があります。

于 2012-05-10T01:20:19.717 に答える
0

これが簡単な解決策です。

class ApplicationController
    ...
    def formats=(values)
        values << :html if values == [:mobile]
        super(values)
    end
    ...
end

Rails (3.2.11) では、:js 形式のリクエストに対して :html フォールバックが既に追加されていることがわかりました。こちらですActionView::LookupContext#formats=

# Override formats= to expand ["*/*"] values and automatically
# add :html as fallback to :js.
def formats=(values)
  if values
    values.concat(default_formats) if values.delete "*/*"
    values << :html if values == [:js]
  end
  super(values)
end

したがって、#formats=自分自身をオーバーライドすることができ、おそらく既存の Rails 実装よりも大雑把でハックなものではありません。

于 2013-03-09T18:40:01.617 に答える