jquery ajax рендеринг нового поста в ruby ​​на рельсах - PullRequest
0 голосов
/ 07 марта 2011

Я пытаюсь создать пост с помощью jquery ajax, но не могу заставить его работать правильно.Кажется, пост выглядит очень странно (я думаю, что он вообще отсутствует), а флеш-сообщение появляется только после обновления страницы.Сообщение также корректно форматируется после обновления страницы.

Вот javascript:

$("#micropost_form").before('<div id="flash_notice"><%= escape_javascript(flash.delete(:notice))%></div>');
$("#user_info").html("<%= pluralize(current_user.microposts.count, "micropost") %>");
$("#feed_items").prepend(" <%= escape_javascript(render(:partial => @micropost)) %>")
$("#micropost_form")[0].reset();

Тело моего макета приложения:

<body>
<div class="container">
  <%= render 'layouts/header' %>
  <section class="round">
<div id="flash_notice"><%= render 'shared/flash_messages'%></div>
    <%= yield %>
  </section>
  <%= render 'layouts/footer' %>
  <%= debug(params) if Rails.env.development? %>
</div>
</body>

Вот мой домстраница (отображается в yield макета приложения):

<table class="front" summary="For signed-in users">
<tr>
  <td class="main">
    <h1 class="micropost">What's happening?</h1>
    <%= render 'shared/micropost_form' %>
    <%= render 'shared/feed' %>
  </td>
  <td class="sidebar round">
    <%= render 'shared/user_info' %>
    <%= render 'shared/stats' %>
  </td>
</tr>
</table>

Вот мой частичный канал:

<% unless @feed_items.empty? %>
 <table id="feed_items" class="microposts" summary="User microposts">
  <%= render :partial => 'shared/feed_item', :collection => @feed_items %>
 </table>
 <%= will_paginate @feed_items %>
<% end %>

Мой частичный флеш-сообщения:

<% flash.each do |key, value| %>
  <div class="<%= key %>"><%= value %></div>
<% end %>

Дайте мне знать, если есть какой-то другой код, который я должен опубликовать.

Так, что я делаю не так?Если вы хотите просмотреть весь код и запустить его локально, чтобы лучше понять, что происходит, вы можете найти его здесь: https://github.com/meltzerj/sample_app

1 Ответ

0 голосов
/ 08 марта 2011

Когда вы используете ajax, вам нужно использовать flash.now для флеш-сообщений.Смотри документы здесь .Rails ищет обновление / перенаправление страницы для загрузки и извлечения из стека флэш-хеша, используя now, установит его немедленно, затем вы сможете получить к нему доступ, как указано выше.Вы можете использовать flash.now вместо обычного использования вспышки в контроллере.Нечто подобное очень типично:

  if @object.save
    flash.now[:notice] = "Object successfully created"
  else
   ...
  end

Так что это решит проблему с флэш-памятью.

Что касается странного контента / стиля, комментировать немного сложно, не видя разметки.Единственное, что мне кажется странным, это render :partial => @micropost

Я не уверен, что @micropost - это просто строка, но вы обычно делаете что-то вроде render :partial => 'path/to/partial', :object => @micropost

Опятьпочти невозможно сказать, не увидев всю другую разметку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...