Не добавляя фактический HTML в Rails - PullRequest
0 голосов
/ 17 июня 2011

Я использую 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 больше не будет, пока я не отправлю новое сообщение.

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

enter image description here

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

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

enter image description here

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

1 Ответ

2 голосов
/ 17 июня 2011

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)

...