アクションの js 応答に問題があります。IM のようなものをポーリングと Redis で実装しています。私が見つけた「問題」は、メッセージを送信する瞬間です。ボタン(通常の方法)またはENTERを使用して実行したい。ボタンを使用してフォームを送信すると、正しく機能します。メッセージを作成すると、他のユーザーの画面にメッセージが表示され、メッセージが create.js を介して画面に表示され、画面に送信された最後のメッセージが付加されます。ENTER キーを使用してフォームを送信すると、create.js を除いてすべて正常に機能します (メッセージを送信し、現時点で他の人がそれを受信します)。私の画面へのメッセージ。以下にコードを記載します。よろしくお願いします;)。
create.js
$(".conversations").prepend("#{escape_javascript(render partial: 'dashboard/kid_conversations/show_message', locals: { message: @message})}");
$("#kid_conversation_message_body").val("");
これは、ENTER 送信を許可する js です。
setInterval(function(){
$.ajax({
url: "#{dashboard_kid_conversation_conversation_polling_url(current_kid, token: (params[:token] rescue nil))}",
})},2000);
$('#kid_conversation_message_body').keypress(function(e) {
if (e.keyCode == 13 && !e.shiftKey) {
e.preventDefault();
$.ajax({
url: "#{dashboard_kid_conversation_messages_url}",
type: "POST",
data: $(this).serialize() + "&conversation_token=" + "#{params[:token]}",
success: $("#kid_conversation_message_body").val(""),
dataType: "json"
});
}
});
ENTER キーを押すと最後のログが記録されるため、create.js が読み込まれます。
Rendered dashboard/kid_conversations/_show_message.html.haml (6.5ms)
Rendered dashboard/kid_conversation_messages/create.js.haml (11.4ms)
Completed 200 OK in 287ms (Views: 270.8ms)
作成アクション:
def create
@message = KidConversationMessage.new(params[:kid_conversation_message])
@message.kid_conversation = @conversation
@message.kid = current_kid
@message.save
end
フォーム、私は Haml を使用します
.response
= form_for [:dashboard, @message] , html: {remote: true}do |f|
= hidden_field_tag :conversation_token, :body , :value=> @conversation.token
.control-group
= f.label :body, _('Reply')
= f.text_area :body, :rows => 4
= submit_tag _('Send'), :class => 'btn button'