Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails ActionCable&;分部 动作电缆配置为正确订阅、广播等。_Ruby On Rails_Ruby_Ruby On Rails 5_Actioncable - Fatal编程技术网

Ruby on rails Rails ActionCable&;分部 动作电缆配置为正确订阅、广播等。

Ruby on rails Rails ActionCable&;分部 动作电缆配置为正确订阅、广播等。,ruby-on-rails,ruby,ruby-on-rails-5,actioncable,Ruby On Rails,Ruby,Ruby On Rails 5,Actioncable,然而,由于Rails部分,我得到了用户化身呈现在错误的一侧的行为 # conversations/_message.html.erb <% if current_user.id == message.user_id %> <Display Avatar Right> </Display Avatar Right> <% else %> <Display Avatar Left> </Display Avatar

然而,由于
Rails部分
,我得到了用户
化身
呈现在错误的一侧的行为

# conversations/_message.html.erb

<% if current_user.id == message.user_id %> 
  <Display Avatar Right>
  </Display Avatar Right>
<% else %>
  <Display Avatar Left>
  </Display Avatar Left>
<% end %>
错误是,在
if current_user.id==message.user_id
将始终返回true,即使对于其他用户(订阅此频道的用户),化身也会显示在右侧

另一件事是,我不想触碰部分中的行为,因为对于发送消息的用户来说,从
消息annel
返回的html是正确的(它在右侧呈现化身)

这里有两个截图来说明 其他订阅者的屏幕显示不正确。

正确显示消息发送者屏幕。

有人知道我还能使用此
\u消息的变通方法吗?谢谢

您键入了

=
替换为
=


=
将返回
message.user\u id
的值,该值在您的情况下是正确的。

当前的\u user.id=message.user\u id
这是一个赋值。控制流将始终进入if块。使用
==
应该是正确的。

嘿, 您的部分内容在广播前被渲染。broadcast_to方法传输一个字符串,该字符串是部分内容的呈现html。因此,在呈现部分时,当前用户是发送消息的用户,因此它呈现为发送者看到部分的方式。 一个解决方案可以是将布尔变量“sender”传递给您的partial,即



这是我问题中的一个错误,我的错。它在
\u message.html.erb
部分中正确键入
如果当前用户id==message.user id
您可能还需要添加相关的模型和控制器代码。我可以,但我知道这不是问题所在。问题是,当html在
messagesAnnel
操作中呈现时,当前用户将始终是创建消息的用户,因此当使用
ApplicationController.render…
呈现分部时,分部始终以相同的方式分支。我曾考虑过添加模型代码,但这有点复杂<代码>消息
属于
对话
<代码>对话可以有许多
用户
,通过
用户对话
。谢谢!这对我遇到的类似问题很有帮助。我不明白的是,我从通道javascript中的received(data)函数中从哪里获得“current_user”id?如果我能弄清楚如何得到它,那么我知道如何按照你的建议进行逻辑比较。但我觉得我在那里遗漏了什么。received()函数如何知道当前用户是谁?
def create_message(message_params)
  message = Message.new context_type: 'Conversation'
  message[:body] = message_params['data']['body']
  message[:context_id] = message_params['data']['conversation_id']
  message[:user_id] = message_params['data']['user_id']
  data = {}
  if message.save
    data[:html] = ApplicationController.render partial: 'conversations/message', locals: { message: message, current_user: current_user }
  else
    p message.errors.full_messages.to_sentence
    data[:html] = "Error: #{message.errors.full_messages.to_sentence}"
  end

  ActionCable.server.broadcast('room', data)
end
# conversations/_message.html.erb