Не добавляя фактический HTML в Rails

Я использую Ruby on Rails 3.0.8. Я пытаюсь следовать учебнику Райана Бейтса, найденному здесь.

Вот весь мой код, затем я объясню, что он делает:

Сообщения / index.html.erb

<ul id="chat">
  <%= render @messages %>
</ul>

<br/>
<%= form_for Message.new, :remote => true do |f| %>
  <%= f.text_field :content %>
  <%= f.submit "Send" %>
<% end %>

messages / _message.html.erb (я использую теги содержимого вместо чистого HTML)

<%= content_tag :li do %>
  <%= content_tag :span, :class => "created_at" do %>
    <%= message.created_at.strftime("%H:%M") %>
  <% end %>
  <%= message.content %>
<% end %>

* messages / create.js.erb *

<% broadcast "/messages/new" do %>
  $("#chat").append("<%= escape_javascript render(@message) %>");
<% end %>

$("#new_message")[0].reset();

Я думаю, что это весь соответствующий код. Моя проблема в том, что когда я нажимаю "Отправить", он добавляет чистый HTML в мой "чат". Но если я обновлю страницу, этого html больше не будет, пока я не отправлю новое сообщение.

* Перед обновлением *

Просто глядя на это, кажется, что html совершенно неверный, конечный тег для span и li не прав. Почему это происходит? Но когда я освежаюсь, это выглядит довольно хорошо.

* После обновления *

Спасибо всем заранее!

1 ответ

Решение

escape_javascript сломался в Rails 3.0.8 - обновить до Rails 3.0.9 (которая вышла сегодня), чтобы решить эту проблему.

http://weblog.rubyonrails.org/2011/6/16/ann-rails-3-0-9-has-been-released

(Проблемы SafeBuffer, упомянутые в разделе "Изменения" объявления о выпуске, связаны с escape_javascript)

Другие вопросы по тегам