1
Rails5でActionCableを使用してチャットコンポーネントを作成しています。私は今日、.js.erbの中でさえレンダリング部分がうまく動作しないと学びました。特にrender
が問題です。だから私は部分的なものを呼び出し、それにルビ変数を渡そうとしています。私は多くのことを試してみました javascriptにruby partialを追加し、rails変数を渡します。
chatbox.append(<%= j (Erubis::Eruby.new(File.read(File.join(Rails.root, 'app/views/msgs',
'_msg.html.erb'))).result(msg: @msg)) %>);
を、エラーがそう部分がある
undefined method `self_or_other' for #<Erubis::Eruby:0x007f832bbb8590>
ですが、変数があります正しくありません。
ビュー/ MSGの/ _msg.html.erb
<li class="<%= self_or_other(msg) %>">
<div class="avatar">
<%# if msg_interlocutor(msg).avatar.url(:thumb) == "thumb/missing.png" %>
<%= image_tag(msg_interlocutor(msg).avatar.url(:thumb), class: "convoPic")%>
</div>
</li>
私も試してみました:
chatbox.append(<%= j (Msg.new(File.read(File.join(Rails.root, 'app/views/msgs',
'_msg.html.erb'))).result(msg: @msg)) %>);
そして、このエラーを取得:レンダリングをしようと When assigning attributes, you must pass a hash as an argument.
:
をApp.msgs = App.cable.subscriptions.create('MsgsChannel', {
received: function(data) {
var chatbox = "#chatbox_" + data.convo + " .chatboxcontent"
var id = data.convo;
var sender_id = data.user.id;
var reciever_id = data.receiver;
<%= @msg %> = data.msg
$(chatbox).append("<%= escape_javascript render(:partial => 'msgs/msg', :locals => { :msg => @msg }) %>");
chatbox.scrollTop(chatbox[0].scrollHeight);
},
renderMsg: function(data) {
console.log(data)
}
});
そして、私が受け取るエラー:
undefined method `render' for #<#<Class:0x007fe976b5c180>:0x007fe9773ed470>
どのように私は部分的に正しくを呼ぶのですか、(MSGレコードで)それをRubyの変数を渡します。ありがとうございました!!
レンダリング部分がうまくいきます。 –
エラーは、 'msg'変数以外のものについて話しています。' chatbox.append( "<%= j render(:partial => 'msgs/msg')%>");また、この方法で変数を渡す必要はありません。バインディングを渡してから部分的な(共有されている)インスタンス変数にアクセスすることができます –
@HoManそれは動作しません。あなたは別の方法を知っていますか? – gwalshington