チャットルームを作成する③:設定一覧

チャットルームを作成する③

Coffeecup header5

0 : この章の目的

 「チャットルームを作成する③」の設定一覧の確認をする


1 : 設定一覧

チャットルームを作成する③」では、「entries」データの作成・表示をします。

具体的には、
  • rooms」データの作成時に「entries」データを作成
  • Chrome messages users 1 start chatチャットを始める をクリックすると、

    entries
    id room_id user_id created_at updated_at
    1 1 1 2016-04-12 20:30:21 2016-04-12 20:30:21
    id room_id user_id created_at updated_at
    1 1 2 2016-04-12 20:30:21 2016-04-12 20:30:21
    の作成をします。

  • entries」データベースを使ったデータの表示

  •  チャットルームに参加している会員の表示 Chrome messages rooms 1 no messages
     ログインしている会員の参加しているチャットルームの表示 Chrome messages users 1 link chats 1 Chrome messages rooms
  • entries」データを使ったチャットルームの制限

  • 上で作成した

    entries
    id room_id user_id created_at updated_at
    1 1 1 2016-04-12 20:30:21 2016-04-12 20:30:21
    id room_id user_id created_at updated_at
    1 1 2 2016-04-12 20:30:21 2016-04-12 20:30:21
    のような「entries」データを使って、チャットルームに参加者が参加しているかを判定します。

これらの設定内容を復習します。

 rooms_controller.rb(「app > controllers」フォルダ)
※ 半角英数字で入力。変更が完了したら「Command」と「s」を一緒に押して内容を保存して下さい。
 Windowsをご利用の方は、「ctrl」と「s」を一緒に押して内容を保存して下さい。


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 class RoomsController < ApplicationController before_action :authenticate_user!, :only => [:create, :show, :index, :edit, :update] def create @room = Room.create @entry1 = Entry.create(:room_id => @room.id, :user_id => current_user.id) @entry2 = Entry.create(params.require(:entry).permit(:user_id, :room_id).merge(:room_id => @room.id)) redirect_to "/rooms/#{@room.id}" flash[:notice] = "チャットを作成しました!" end def show @room = Room.find(params[:id]) if Entry.where(:user_id => current_user.id, :room_id => @room.id).present? @messages = @room.messages @message = Message.new @entries = @room.entries else redirect_to :back end end def index @entries = current_user.entries end def edit @room = Room.find(params[:id]) if Entry.where(:user_id => current_user.id, :room_id => @room.id).present? else flash[:alert] = "無効なユーザー" redirect_to :back end end def update @room = Room.find(params[:id]) if Entry.where(:user_id => current_user.id, :room_id => @room.id).present? @room.update(params.require(:room).permit(:name, :explain)) flash[:notice] = "チャット情報が変更されました" redirect_to :back else flash[:alert] = "無効なユーザー" redirect_to :back end end end

 show.html.erb(「app > views > rooms」フォルダ)
※ 半角英数字で入力。変更が完了したら「Command」と「s」を一緒に押して内容を保存して下さい。
 Windowsをご利用の方は、「ctrl」と「s」を一緒に押して内容を保存して下さい。


1 2 3 4 5 6 7 8 9 10 11 12 13 14 ... <br> <div class="row"> <div class="col-xs-3 text-center"> <h4><%= @room.name %></h4> <h4><small><%= @room.explain %></small></h4> <hr> <h4>参加者</h4> <% @entries.each do |e| %> <h5><strong><a href="/users/<%= e.user.id %>"><%= e.user.family_name %> <%= e.user.first_name %>さん</a></strong></h5> <% end %> <hr> <a href="/rooms/<%= @room.id %>/edit" class="btn btn-success">情報を編集する</a> </div> <div class="col-xs-9"> #省略

 index.html.erb(「app > views > rooms」フォルダ)
※ 半角英数字で入力。変更が完了したら「Command」と「s」を一緒に押して内容を保存して下さい。
 Windowsをご利用の方は、「ctrl」と「s」を一緒に押して内容を保存して下さい。


1 2 3 4 5 6 7 8 <h1>チャット一覧</h1> <hr> <% @entries.each do |e| %> <a href="/rooms/<%= e.room_id %>"><%= e.room.name %></a> <hr> <% end %> <p><a href="/users/<%= current_user.id %>" class="btn btn-primary"><%= current_user.family_name %> <%= current_user.first_name %>さんの情報に戻る</a></p> <p><a href="/" class="btn btn-info">トップに戻る</a></p>

 room.rb(「app > models」フォルダ)
※ 半角英数字で入力。変更が完了したら「Command」と「s」を一緒に押して内容を保存して下さい。
 Windowsをご利用の方は、「ctrl」と「s」を一緒に押して内容を保存して下さい。


1 2 3 4 5 6 class Room < ActiveRecord::Base has_many :messages has_many :entries end


 users_controller.rb(「app > controllers」フォルダ・5〜13行目)
※ 半角英数字で入力。変更が完了したら「Command」と「s」を一緒に押して内容を保存して下さい。
 Windowsをご利用の方は、「ctrl」と「s」を一緒に押して内容を保存して下さい。


5 6 7 8 9 10 11 12 13 def show @user = User.find(params[:id]) if @user.id == current_user.id @entries = current_user.entries.limit(3) else @room = Room.new @entry = Entry.new end end

 show.html.erb(「app > views > users」フォルダ)
※ 半角英数字で入力。変更が完了したら「Command」と「s」を一緒に押して内容を保存して下さい。
 Windowsをご利用の方は、「ctrl」と「s」を一緒に押して内容を保存して下さい。


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 <div class="row"> <div class="col-xs-6"> <h1>ユーザー情報</h1> <hr> <p>名前:<%= @user.family_name %><%= @user.first_name %>さん(<%= @user.age %>歳)</p> <p>自己紹介:<%= @user.self_introduction %></p> <br> <% if @user.id == current_user.id %> <p><a href="/users/<%= @user.id %>/edit" class="btn btn-success">ユーザー情報を編集する</a></p> <% else %> <%= form_for @room do |f| %> <%= fields_for @entry do |e| %> <%= e.hidden_field :user_id, :value => @user.id %> <% end %> <%= f.submit "チャットを始める", :class => "btn btn-warning" %> <% end %> <% end %> </div> <% if @user.id == current_user.id %> <div class="col-xs-6"> <h1>チャット一覧</h1> <hr> <% @entries.each do |e| %> <p><a href="/rooms/<%= e.room.id %>"><strong><%= e.room.name %></strong></a></p> <hr> <% end %> <a href="/rooms" class="btn btn-info">チャット一覧を見る</a> </div> <% end %> </div> <hr> <p><a href="/users" class="btn btn-primary">ユーザー一覧に戻る</a></p>

 user.rb(「app > models」フォルダ)
※ 半角英数字で入力。変更が完了したら「Command」と「s」を一緒に押して内容を保存して下さい。
 Windowsをご利用の方は、「ctrl」と「s」を一緒に押して内容を保存して下さい。


1 2 3 4 5 6 7 8 9 10 class User < ActiveRecord::Base # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable has_many :messages has_many :entries end


 messages_controller.rb(「app > controllers」フォルダ)
※ 半角英数字で入力。変更が完了したら「Command」と「s」を一緒に押して内容を保存して下さい。
 Windowsをご利用の方は、「ctrl」と「s」を一緒に押して内容を保存して下さい。


5 6 7 8 9 10 11 12 def create if Entry.where(:user_id => current_user.id, :room_id => params[:message][:room_id]).present? @message = Message.create(params.require(:message).permit(:user_id, :content, :room_id).merge(:user_id => current_user.id)) else flash[:alert] = "無効なユーザー" end redirect_to :back end


 entry.rb(「app > models」フォルダ)
※ 半角英数字で入力。変更が完了したら「Command」と「s」を一緒に押して内容を保存して下さい。
 Windowsをご利用の方は、「ctrl」と「s」を一緒に押して内容を保存して下さい。


1 2 3 4 5 6 class Entry < ActiveRecord::Base belongs_to :room belongs_to :user end

ここまでがチャットルームを作成する③の設定になります。