在 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/