В Rails 3: как мне сделать рендеринг с макетом в response_with с использованием пользовательского формата - PullRequest
4 голосов
/ 20 октября 2010

Моя проблема похожа на проблему в этом вопросе, но противоположна. Как мне указать ": layout => false" в response_with Rails?

Контроллер является своего рода конвертером файлов.Он отвечает на многие форматы.Один формат должен отображать HTML-макет с метаданными.Этот формат требует визуализации макета, в отличие от большинства других форматов.Проблема в том, что я не могу убедить Rails отрендерить его.

class CustomFilesController < ApplicationController
  respond_to :all, :only => :show
  def show
    @custom_file = CustomFile.find(params[:id])
    respond_with(@custom_file) do |format|
      format.html {}
      format.xml {}
      format.json {}
      format.fil {
        puts '>>>>> IN FIL <<<<<'
        render :layout => true
      }
      format.any {
        file = @custom_file.as(:type => params[:format], :size => params[:size]) ## the REAL path to the file
        (file.nil? || @custom_file.nil?) ? head(:not_found) : send_file(file, :disposition => 'inline', :url_based_filename => true)
      }
    end
  end
end

Я думал, что ": layout => true" будет работать, но, очевидно, нет.

Как видите, я убралвсе остальное в контроллере, прежде чем вставлять его сюда.Формат "fil" добавляется к типам mime в формате text / html в config / initializer / mime_types.rb.У меня есть файл представления, и он рендерится, но без разметки вокруг него.

Буду признателен за любой совет.Некоторое время я ни к чему не привел, и все, что я нахожу в Интернете, говорит о том, что мой код должен работать.

Заранее спасибо.

1 Ответ

2 голосов
/ 20 октября 2010

Обнаружено, что макет отображается, если я укажу точный путь и имя файла макета. В моем случае:

render :layout => '/layouts/application.html.haml'
...