作聊天室②:设定一览

作聊天室②

Coffeecup header4

0 : 这个章的目的

 看看「作聊天室②」的设定一览


1 : 设定一览

作聊天室②」里,设定作「rooms」资料库的网页了。

设定的內容是
  • routes.rb(七个网页的设定)
  • create网页
  • Chrome messages users 1 start chat
  • show网页
  • Chrome messages rooms 1 no messages
  • index网页
  • Chrome messages rooms
  • edit网页
  • Chrome messages rooms 1 edit
  • update网页
  • Chrome messages rooms 1 update
这个六个设定。

在这里解释这个六个设定。

  • routes.rb(七个网页的设定)

  • 「rooms」资料库里使用
    • create
    • show
    • index
    • edit
    • update
    这个五个网页。

    所以编辑,在设定七个网页config > migrate > routes.rb文件。

     routes.rb(追加第8行)
    ※ 用半母字母数字打入。一起点击「Command」跟「s」可以保存內容。
     使用Windows的话,点击「ctrl」跟「s」可以保存內容。


    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... 63 64 Rails.application.routes.draw do devise_for :users resources :welcome, :only => [:index] root "welcome#index" resources :users, :only => [:show, :index, :edit, :update] resources :messages, :only => [:create] resources :rooms, :only => [:create, :show, :index, :edit, :update] # The priority is based upon order of creation: first created -> highest priority. # See how all your routes lay out with "rake routes". # You can have the root of your site routed with "root" # root 'welcome#index' # 省略 end

    这样设定好內容了。

  • 「rooms」网页

  • 接着作rooms」网页

    首先为了作网页,资料操作跟网页显示的设定文件。打入下面的命令吧。

     terminal
     使用Windows的话,用「命令提示符」。
    1 rails g controller rooms

    在这个命令作好的
    • 操作资料的文件「app > controllers > rooms_controller.rb
    • 显示网页的文件夾「app > views > rooms
    这个两个文件里设定內容。

     但是「rooms」资料的新增要使用「users」资料库的「show」网页,所以除了上面两个文件以外,编辑
    • app > controllers > users_controller.rb
    • app > views > users > show.html.erb
    这个两个设定文件。
     设定的內容,参考下面。

     从资料操作的文件开始。

     rooms_controller.rb
    ※ 用半母字母数字打入。一起点击「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 class RoomsController < ApplicationController before_action :authenticate_user!, :only => [:create, :show, :index, :edit, :update] def create @room = Room.create redirect_to "/rooms/#{@room.id}" flash[:notice] = "作好聊天室了!" end def show @room = Room.find(params[:id]) @messages = @room.messages @message = Message.new end def index @rooms = Room.all end def edit @room = Room.find(params[:id]) end def update @room = Room.find(params[:id]) @room.update(params.require(:room).permit(:name, :explain)) flash[:notice] = "编辑聊天室好了!" redirect_to :back end end

     users_controller.rb(追加第7〜10行)
    ※ 用半母字母数字打入。一起点击「Command」跟「s」可以保存內容。
     使用Windows的话,点击「ctrl」跟「s」可以保存內容。


    1 2 3 4 5 6 7 8 9 10 11 12 class UsersController < ApplicationController before_action :authenticate_user!, :only => [:show, :index, :edit, :update] def show @user = User.find(params[:id]) if @user.id == current_user.id else @room = Room.new end end # 省略

     接着看网页显示的设定吧。

     事先从「users」网页开始。

     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 <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| %> <%= f.submit "开始聊天", :class => "btn btn-warning" %> <% end %> <% end %> </div> </div> <hr> <p><a href="/users" class="btn btn-primary">返回会员资料</a></p>

     接着做「rooms」网页。

     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 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 <br> <div class="row"> <div class="col-xs-3 text-center"> <h4><%= @room.name %></h4> <h4><small><%= @room.explain %></small></h4> <hr> <a href="/rooms/<%= @room.id %>/edit" class="btn btn-success">编辑资料</a> </div> <div class="col-xs-9"> <% if @messages.present? %> <% @messages.each do |m| %> <% if m.user_id == current_user.id %> <h4 class="text-right"> <p class="alert alert-success"> <%= m.content %> <br><br> <small><strong><a href="/users/<%= m.user_id %>"><%= m.user.family_name %> <%= m.user.first_name %></a></strong></small> </p> </h4> <% else %> <h4 class="text-left"> <p class="alert alert-info"> <%= m.content %> <br><br> <small><strong><a href="/users/<%= m.user_id %>"><%= m.user.family_name %> <%= m.user.first_name %></a></strong></small> </p> </h4> <% end %> <% end %> <% else %> <br> <h3 class="text-center">沒有讯息</h3> <br> <% end %> <hr> <%= form_for @message do |f| %> <%= f.text_field :content, :class => "form-control myform", :placeholder => "打入讯息" %> <%= f.hidden_field :room_id, :value => @room.id %> <br> <div class="text-center"> <%= f.submit "投稿", :class => "btn btn-primary" %> </div> <% end %> </div> </div>

     index.html.erb(「app > views > rooms」文件夾) ※ 用半母字母数字打入。一起点击「Command」跟「s」可以保存內容。
     使用Windows的话,点击「ctrl」跟「s」可以保存內容。


    1 2 3 4 5 6 7 8 <h1>聊天室一览</h1> <hr> <% @rooms.each do |r| %> <a href="/rooms/<%= r.id %>"><%= r.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>

     edit.html.erb(「app > views > rooms」文件夾)
    ※ 用半母字母数字打入。一起点击「Command」跟「s」可以保存內容。
     使用Windows的话,点击「ctrl」跟「s」可以保存內容。


    1 2 3 4 5 6 7 8 9 10 11 12 13 14 <h2>编辑聊天室的资料</h2> <hr> <%= form_for @room do |f| %> <%= f.label :name %> <%= f.text_field :name, :class => "form-control my-form", :placeholder => "打入名字" %> <br> <%= f.label :explain %> <%= f.text_area :explain, :class => "form-control my-form", :size => "30x10", :placeholder => "打入說明" %> <br> <%= f.submit "更新", :class => "btn btn-success" %> <% end %> <hr> <p><a href="/rooms/<%= @room.id %>" class="btn btn-primary">返回聊天室资料</a></p> <p><a href="/" class="btn btn-info">返回主页</a></p>

     最后设定「messages」资料库跟「rooms」资料库之间的关联吧

    在这里,messages」资料库是,

    messages
    id content user_id room_id created_at updated_at
    1 你好! 1 1 2016-04-12 20:33:43 2016-04-12 20:33:43
    这样设定內容。
    rooms」资料可以拿复数的「messages」资料,所以

    1 @messages = @room.messages

    1 @room = @message.room

    可以做这样的內容的设定。
    ※ 详细请参考这里

     message.rb(「app > models」文件夾)
    ※ 用半母字母数字打入。一起点击「Command」跟「s」可以保存內容。
     使用Windows的话,点击「ctrl」跟「s」可以保存內容。


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

     room.rb(「app > models」文件夾)
    ※ 用半母字母數数字打入。一起点击「Command」跟「s」可以保存內容。
     使用Windows的话,点击「ctrl」跟「s」可以保存內容。


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

    到这里做好了rooms」资料库的网页的设定了。