2017-01-25 5 views
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の変数を渡します。ありがとうございました!!

+0

レンダリング部分がうまくいきます。 –

+0

エラーは、 'msg'変数以外のものについて話しています。' chatbox.append( "<%= j render(:partial => 'msgs/msg')%>");また、この方法で変数を渡す必要はありません。バインディングを渡してから部分的な(共有されている)インスタンス変数にアクセスすることができます –

+0

@HoManそれは動作しません。あなたは別の方法を知っていますか? – gwalshington

答えて

0

あなたはそれが定義されていますここは、以下の

module MessagesHelper 
    def self_or_other(message) 
    message.user == current_user ? "self" : "other" 
    end 

    def message_interlocutor(message) 
    message.user == message.conversation.sender ? message.conversation.sender : message.conversation.recipient 
    end 
end 

と「messages_helper.rb」ファイルを持っています。

関連する問題