6784


Ruby on Railsを使ったチャットを作っています。ビギナーです。  
ActionControllerでユーザーのpostをjsonにして送信します。クライエント側ではそれをハッシュにしています。

**チャット部分のhtml.erbファイルの一部**

[code]

    <% javascript_tag do %>
      $(function(){
        var eventSource = new EventSource("/stream");
        eventSource.addEventListener('push', function(event){
    
          post = JSON.parse(event.data);
          $('#time-line').append(【この部分がわかりません】)
    
        });
      });
    <% end %>
    
[/code]

受け取ったJSONから作ったハッシュ`post =
JSON.parse(event.data)`に対して、sharedディレクトリにある部分テンプレート`_post.html.erb`を適用したものをチャットの本体に次々と挿入したいと考えていますが、その方法がわかりません。色々やってみたところ、`.append(<%...%>)`内でpostハッシュがうまく機能していない(undefined
local variable or method 'post' for ...)らしいことがわかりました。

どなたか解決策を教えてくださいませんか。


CC BY-SA 3.0
2015-02-19T10:55:08.277
6775
2015-02-19T12:54:59.477
2015-02-19T12:14:36.017
question
javascript ruby-on-rails
ハッシュに部分テンプレートを適用してhtmlに挿入するには


端的に言うなら、Javascriptの変数をerbで使うことはできません。

erbに含まれる`<%...%>`がサーバー側で`render`され、そのHTMLをブラウザが受け取り、Javascriptが実行され、`post`変数が生まれる、という順番ですから、`.append(<%...%>)`を処理する時点では`post`変数は存在しないことになります。

今回のケースだと、`render_to_string`したHTMLを送るようにしてはいかがでしょうか。この方法であれば`_post.html.erb`をそのまま使うことができます。

参考 <http://rochefort.hatenablog.com/entry/20120116/p1>

この記事ではHTMLだけをクライアントに送っていますが、JSONの中に文字列として含めるという手もあるかと思います。


CC BY-SA 3.0
2015-02-19T12:54:59.477
6784
2015-02-19T12:54:59.477
8000
6775
answer