在javascript中附加ruby部分,并传递rails变量

在javascript中附加ruby部分,并传递rails变量,javascript,ruby-on-rails,ruby,ruby-on-rails-5,Javascript,Ruby On Rails,Ruby,Ruby On Rails 5,在Rails5中使用ActionCable创建聊天组件。我今天了解到,即使在.js.erb中,渲染部分也不起作用渲染就是这个问题。现在我尝试调用一个partial,并向它传递一个ruby变量 我已经尝试了很多事情,目前我正试图做到这一点: chatbox.append(<%= j (Erubis::Eruby.new(File.read(File.join(Rails.root, 'app/views/msgs', '_msg.html.erb'))).result(msg

在Rails5中使用ActionCable创建聊天组件。我今天了解到,即使在.js.erb中,渲染部分也不起作用<代码>渲染就是这个问题。现在我尝试调用一个partial,并向它传递一个ruby变量

我已经尝试了很多事情,目前我正试图做到这一点:

chatbox.append(<%= j (Erubis::Eruby.new(File.read(File.join(Rails.root, 'app/views/msgs',
        '_msg.html.erb'))).result(msg: @msg)) %>);
我收到的错误是:

undefined method `render' for #<#<Class:0x007fe976b5c180>:0x007fe9773ed470>
的未定义方法“render”#
如何正确地调用一个partial,向它传递一个ruby变量(带有msg记录)。谢谢

您是否有包含以下内容的“messages\u helper.rb”文件

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\u helper.rb”文件

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

这就是它的定义。

渲染部分应该可以工作<代码>聊天框。追加(“'msgs/msg')%>”错误所指的不是
msg
变量。另外,您不需要以这种方式传递变量,您可以尝试传递
绑定
,然后从partial(共享的)@HoMan访问实例变量,因为它不起作用。你知道另一种方法吗?为什么你使用这个erubis-eruby方法而不是rails标准的render?
=data.msg
这是行不通的,因为只有当服务器发送页面并且Javascript在浏览器上持续运行时,ERB才会被评估。render-partial应该可以工作<代码>聊天框。追加(“'msgs/msg')%>”错误所指的不是
msg
变量。另外,您不需要以这种方式传递变量,您可以尝试传递
绑定
,然后从partial(共享的)@HoMan访问实例变量,因为它不起作用。你知道另一种方法吗?为什么你使用这个erubis-eruby方法而不是rails标准的render?
=data.msg
这是行不通的,因为ERB只有在服务器发送页面并且Javascript在浏览器上持续运行时才会被评估。
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>
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