Моя удаленная отправка формы пытается обработать файл pages / _page.js.haml, но я хочу, чтобы это был pages / _page.html.haml - PullRequest
0 голосов
/ 12 марта 2011

Я использую хамл, так что, надеюсь, вы поймете, что здесь происходит.На мой взгляд, читать легче, но некоторым это не нравится: p

На моей странице редактирования есть форма, которая выглядит следующим образом:

.center_col
  -# I got into this weird habit of using "data-remote" for remote submission, w/e
  = form_for @content, :html => {"data-remote" => true, :id => "page_editor", "data-page-id" => @content.id} do |f|
    %h2
      = f.label :textile, "Text", :class => 'inline'
      (Parsed with
      = link_to("Textile", "http://redcloth.org/textile/", :class => 'external') + ")"
    %ul.fields
      %li.field
        = f.text_area :textile, :class => "full-field", "data-remote-preview" => preview_page_path(@content)
        = display_error(:content, :textile)
      %li.submit.left
        = f.submit "Save Changes", :class => "rm_lr_margin"

Когда вы отправляете формуЯ хочу, чтобы действие контроллера отображало _page частично.Прямо сейчас действие контроллера пытается отрисовать 'pages / _page.js.haml', но я хочу использовать 'pages / _page.html.haml', потому что у меня есть ловушка jquery после успеха, которая автоматически заменяет содержимое в отредактированномобласть страницы с новым текстом.

Вот мое действие:

def update
  load_content(params[:id])
  @content.textile = params[:page][:textile]

  if @content.save
    render :partial => "pages/page", :content_type => "text/html", :layout => false, :locals => {:page => @content}
  else
    render :action => 'edit', :layout => false
  end
end

В другом месте ...

def load_content(page_name)
  @content = Page.find_by_name!(page_name)
  @page = @content.name
end

Так что все это работает.За исключением того, что он отображает неправильный вид :( Когда вы впервые попадаете на страницу, ее раздел заполняется с использованием частичного «pages / _page.html.haml», и когда вы обновляете содержимое с помощью этого действия ajax, я хотел бы использовать этотот же частичный вместо того, чтобы дословно дублировать содержимое под именем «pages / _page.js.haml». Кто-нибудь знает, что мне здесь не хватает, чтобы заставить действие отображать содержимое haml, а не содержимое js? Когда я выполняю обновление правильнотеперь он выдает мне эту ошибку:

Template is missing

Missing partial pages/page with {:formats=>[:js, "application/ecmascript", "application/x-ecmascript", "*/*"], :locale=>[:en, :en], :handlers=>[:rxml, :haml, :builder, :rjs, :rhtml, :erb]}

Если я скопирую файл html.haml и назову его .js.haml, он будет работать, как и ожидалось.

Это jquery, который я используюдля обработки событий, которые rails.js дает мне при отправке формы:

$('form#page_editor').live({
  "ajax:beforeSend": function(xhr, settings){
    $.facebox.loading();
  },
  "ajax:success": function(e, data, status, xhr){
    $.facebox.close();
    $('#page_' + $(this).attr('data-page-id')).replaceWith(data);
  },
  "ajax:error": function(e, xhr, status, error){
    $.facebox(xhr.responseText);
  }
});

Не думаю, что эта часть была релевантной, но она показывает вам, когда в JS я обновляю содержимое наЯ подозреваю, что проблема либо в вызове render моего действия, либо в вызове form_for представления. Любая помощь будет принята:)

1 Ответ

0 голосов
/ 07 мая 2011

Вы можете запросить конкретный формат:

render :partial => "pages/page.html"
...