fukusyun
@fukusyun (駿一 福井)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

メッセージが一度しか送れない!!

Q&A

Closed

sendボタンを押すとメッセージは非同期で表示され、データベースにも残るが
リロードしないともう一度メッセージは送れず、
リロードするとメッセージデータが一つ、古いものから消える

actioncable使ってます

  messages controller

class MessagesController < ApplicationController


  def new
    @book = Book.find(params[:book_id])
    @messages = Message.all
    @message = Message.new

  end

  def create
    @book = Book.find(params[:book_id])
    @message = @book.build_message(message_params)
    if @message.save!
    ActionCable.server.broadcast 'message_channel', js_content: @message
    # redirect_to "book_messages_path   "
    end
  end

  private 
 def message_params
  params.require(:message).permit(:text).merge(user_id: current_user.id,book_id: params[:book_id])
 end
end

メッセージのやり取りを行う場所 message new.html.erb

h1 class = "top-messsage"><%="#{@book.name}"%></h1>

  <% @messages.reverse_each do |message| %>
  <div class = "message-head">
   <div id='messages'>
    <i><%= message.text %></i>

       <%= message.user.nickname%>
  </div>
   <% end %>
</div>
  <div class="box-new">
      <%= form_with(model: [@book, @message],url: "/books/#{@book.id}/messages", local: true) do |f| %>
     <%= f.text_field :text, id: "message_text" %>
     <%= f.submit '送信' %>
    <% end %>
     <div class="message-new">
   <i class="container2">  <%= link_to 'home', "/", class: "btn-open3" %></i>
   </div>
  </div>

url:の指定先を変えてみたり
したが原因がわからない

0

2Answer

action cableはよくわかんないので、 「リロードするとメッセージデータが一つ、古いものから消える」コチラだけ。

book has_one message になってないでしょうか?
http://ria10.hatenablog.com/entry/20130630/1372564494 この記事にある現象によってdeleteされてinsertされてないでしょうか?
サーバーのログを見てみると良いかもしれないです。

1Like

Your answer might help someone💌