0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】リアルタイムチャット機能実装(Action Cable)1/3

Last updated at Posted at 2021-06-10

目的

Railsで作成したアプリに、Action Cableを用いてリアルタイムチャット機能を導入する。

開発環境

macOS: Big Sur
Rubyバージョン: 2.6.5
Railsバージョン: 6.0.0

前提

  • アプリが作成されている。

手順

  1. はじめに
  2. コントローラーの作成
  3. モデルの作成
  4. ルーティングの設定
  5. アクションの定義
  6. ビューファイルの作成

はじめに

今回はかなり長くなってしまうので、3回に分けて投稿させて頂きます。
1回目の今回は、アプリの下準備としてチャット機能実装、
2回目は、Action Cableを用いての実装、
3回は、本番環境で使用するための実装をしていきます!

コントローラーの作成

では早速始めていきます!

今回のアプリには画面の遷移は必要ないので、newアクションを指定してコントローラーを作成します。
newと指定することでnew.html.erbも生成されます。

ターミナル
% rails g controller messages new

モデルの作成

次はモデルの作成です!

ターミナル
% rails g model message text:text

モデルの作成時にmessagesテーブルにtext型でtextカラムを追加しています。

ターミナル
% rails db:migrate

マイグレーションも忘れずに!

ルーティングの設定

続いてルーティングの設定です。
newcreateアクションのみ設定します。

routes.rb
Rails.application.routes.draw do
  root 'messages#new'
  resources :messages, only: [:create]
end

アクションの定義

次はアクションの定義です。

app/controllers/messages_controller.rb
class MessagesController < ApplicationController
  def new
    @messages = Message.all
    @message = Message.new
  end

  def create
    @message = Message.new(text: params[:message][:text])
  end
end

ビューファイルの作成

最後にビューファイルの作成です。
メッセージの一覧とフォームを表示させます。

app/views/messages/new.html.erb
<%= form_with model: @message do |f| %>
  <%= f.text_field :text %>
  <%= f.submit '送信' %>
<% end %>
<div id='messages'>
  <% @messages.reverse_each do |message| %>
    <p><%= message.text %></p>
  <% end %>
</div>

これで準備は完了です!

最後に

以上で下準備は完了です。
次回はAction Cableの実装を行っていきます。【Rails】リアルタイムチャット機能実装(Action Cable)2/3
では。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?