質問編集履歴

1 問題・やりたいことの改善

kohekohe

kohekohe score 12

2016/10/22 15:00  投稿

railsで予約がcreateされたタイミングでリアルタイムメッセージを送信したい
###前提・実現したいこと
現在初心者ですが、動画講座を見ながら、railsでCtoCのサービスを作っています。
そこでユーザーが商品を予約した際に商品を投稿したユーザーにメッセージを送信したいと考えています。
初心者ですが、動画講座を見ながら、railsでCtoCのサービスを作っています。
そこでユーザーが商品を予約した際に、商品を投稿したユーザーに本アプリ内にあるユーザー間メッセージ機能を使って、予約したユーザーが"あなたの商品を予約したいです!"という内容のメッセージを送信したいと考えています。
ユーザー間のメッセージ機能は実装済みですが、予約がcreateされたタイミングでどのようにmessage_controllerを動かせば良いのかが分かりません。現在send_first_chatというアクションで定義しています。
###該当のソースコード
```ruby
##reservation_controller
class ReservationsController < ApplicationController
 before_action :authenticate_user!
 def create
   @reservation = current_user.reservations.create(reservation_params)
   Item.find(params[:item_id]).update(active:false)
   @item = Item.find(params[:item_id])
   ReservationMailer.reservation_created(current_user, @item.user).deliver
   #ここでmessage_controller内のsend_first_chatというアクションを動かしたい  
   redirect_to controller: :pages, action: :thanks
 end
end
```
```ruby
##message_controller
class MessagesController < ApplicationController
   before_action :authenticate_user!
   before_action :set_conversation
   def index
       if current_user == @conversation.sender || current_user == @conversation.recipient
           @other = current_user == @conversation.sender ? @conversation.recipient : @conversation.sender
           @messages = @conversation.messages.order("created_at DESC")
       else
           redirect_to conversations_path, alert: "あなたをこれを見る権限がありません"
       end
   end
   def create
       @message = @conversation.messages.new(message_params)
       @messages = @conversation.messages.order("created_at DESC")  
       if @message.save  
           respond_to do |format|  
               format.js  
           end  
       end  
   end  
       def send_first_message  
       @message = @conversation.messages.new("あなたの商品を予約したいです!")  
       @messages = @conversation.messages.order("created_at DESC")
       if @message.save
           respond_to do |format|
               format.js
           end
       end
   end
   private
       def set_conversation
           @conversation = Conversation.find(params[:conversation_id])
       end
       def message_params
           params.require(:message).permit(:content, :user_id)
       end
end
```
```
##create.js.erb
<% publish_to conversation_messages_path(@conversation) do %>
$('#chat').prepend("<%= j render @message %>");
<% end %>
$('#new_message')[0].reset();
```
###試したこと
ユーザーがreservationをcreateした際に,購入したユーザーから出品者に対して
"あなたの商品を予約したいです!" というmessageを送りたいです。
説明が分かりづらかったら申し訳ございません。
よろしくお願いします。。。
  • Ruby on Rails

    11874 questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る