6 : 作聊天室:总结

上章 : 作聊天室③

Coffeecup header6 这个章是,上章「作聊天室③」继续的內容。
还沒看完上章的內容的话,请参考这里

3 : 总结

 在这个章总结解释的內容。
在这个章解释的內容是

  • 设定资料库的文件的「default
  • ※ 详细请参考这里

     日子_create_rooms.rb
    1 2 3 4 5 6 7 8 9 10 11 class CreateRooms < ActiveRecord::Migration def change create_table :rooms do |t| t.string :name, default: "新的聊天" t.text :explain, default: "打入说明" t.timestamps null: false end end end

    这样子设定好name」「explain」的框子里刚开始放的资料了。

  • 「Bootstrap」的「row」「col-xs-数字
  • ※ 详细请参考这里

     show.html.erb
    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>

    在这个row」跟「col-xs-数字,把长度12的画面的分割成几个內容显示。

     例如说把「12」的画面要分成「6」「6」的话,

    1 2 3 4 5 6 7 8 <div class="row"> <div class="col-xs-6"> 内容1 </div> <div class="col-xs-6"> 内容2 </div> </div>

    这样设定,可以显示

    内容1(长度6)

    内容2(长度6)

    这样的內容。

  • 判別资料的「present?
  • ※ 详细请参考这里

     show.html.erb
    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 <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> <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> <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 %> </div> </div>

    到这里判別有沒有@messages
    • 有的话,显示第11〜29行
    • 沒有的话,显示第31〜33行
    这里的內容。
  • 设定输入框的大小的「:size
  • 详细请参考这里

     edit.html.erb
    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>

    的第8行的

    1 , :size => "30x10"

    在设定输入框的大小。
    到这里设定了「左右30字・上下10行」的输入框。
  • 在打入资料的地方,新增別的资料的「fields_for
  • ※ 详细请参考这里

     show.html.erb
    10 11 12 13 14 15 16 17 <% 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 %>

    设定「@room」的地方里,设定@entry了。
  • 限制资料的数字的「limit
  • ※ 详细请参考这里

     users_controller.rb
    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

    这样设定了@entries里最多也可以放三个资料的设定。
  • params
  • ※ 详细请参考这里

     messages_controller.rb
    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



    1 :room_id => params[:message][:room_id]

    的部分
    取得送來的「message」资料的「room_id

     这些是新设定的內容。

在下章,想在会员资料追加上载的图像。