javascript - 在javascript中追加ruby部分,并传递一个rails变量

标签 javascript ruby-on-rails ruby ruby-on-rails-5

在 Rails5 中使用 ActionCable 创建聊天组件。我今天了解到,即使在 .js.erb 中,部分渲染也不起作用。 render 具体来说就是问题所在。所以现在我尝试调用部分,并将 ruby​​ 变量传递给它。

我尝试了很多事情,目前这就是我正在努力实现的目标:

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>

所以部分存在,但变量不正确。

<小时/>

views/msgs/_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)) %>);

并收到此错误: 分配属性时,必须传递哈希值作为参数。

尝试渲染:

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>

如何正确调用部分,将其传递给 ruby​​ 变量(带有消息记录)。谢谢!!

最佳答案

您是否有包含以下内容的“messages_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

这就是它的定义位置。

关于javascript - 在javascript中追加ruby部分,并传递一个rails变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41842615/

相关文章:

javascript - 这里什么是虚假的?为什么它会重复数据删除?为什么 console.log() 在 foreach 前面包含答案?

javascript - 'this' 在下面的 javascript 中代表什么?

javascript - 使用 d3 绘制箭头

ruby-on-rails - Ruby on Rails 标签与 HTML 标签

ruby-on-rails - Rails action Mailer raise_delivery_errors,它是如何工作的?如何检测反弹?

javascript - YouTube API - Firefox/IE 为任何 "X is not a function"请求返回错误 'player.'

ruby-on-rails - 如何在 Rails 中使用 RESTful 路由创建删除表单。

ruby-on-rails - 覆盖 has_many getter

ruby - 何时在 Ruby 中使用 Kernel#gsub?

ruby - OS X Mountain Lion : gcc-4. 2 没有那个文件或目录