W części tej utworzymy system zarządzania pokojami.
Model pokoju
Model zawierać będzie takie pola jak:
- Nazwa - tekst informujący o czym jest dany pokój (np Ruby on Rails)
- ID - standardowo ;)
- Skrót - przerobiona nazwa, same małe litery oraz zamiast spacji znaki podkreslenia (ruby_on_rails) - do URLi - skrót będzie generowany automatycznie z nazwy
- Created_at, updated_at - standardowo :)
Z racji tego że przykłady jak tworzyć modele i kontrolery podałem w poprzedniej części tutoriala, tutaj ominę ten element i będę podawał tylko kod źródłowy bez kodu generatorów:
Najpierw kod migracji:
class CreateChatRooms < ActiveRecord::Migration
def self.up
create_table :chat_rooms do |t|
t.string :name
t.string :link
t.timestamps
end
end
def self.down
drop_table :chat_rooms
end
end
Kod modelu:
class ChatRoom < ActiveRecord::Base
ROOM_MAX_LENGTH = 14
ROOM_MIN_LENGTH = 5
validates_uniqueness_of :name, :message => 'którą wybrałeś już istnieje'
validates_length_of :name, :within => ROOM_MIN_LENGTH..ROOM_MAX_LENGTH,
:too_long => "jest za długa",
:too_short => "jest za krótka"
validates_format_of :name, :with => /^[A-Z0-9_ ]*$/i,
:message => 'jest nieprawidłowa'
HUMANIZED_ATTRIBUTES = {
:name => 'Nazwa'
}
def self.human_attribute_name(attr)
HUMANIZED_ATTRIBUTES[attr.to_sym] || super
end
def save
self.link = self.name.gsub(' ', '_')
super
end
end
Kontroler admin
Kontroler ten będzie RESTowy ponieważ idealnie się do tego nadaje ;)
Warto tutaj wspomnieć, że wbrew zasadom nie nazwę kontrolera ChatRooms tylko admin, ponieważ jest to jedyne zadanie admina w naszym czacie. Jednak gdybyście chcieli rozbudować ten czat to trzymajcie się prawidłowego nazewnictwa ;)
W routes.rb:
map.resources :chat_rooms, :controller => :admin
Nasz kontroler:
class AdminController < ApplicationController
before_filter :authorize
before_filter :only_admin
layout "main"
def index
@chat_rooms = ChatRoom.find(:all)
end
def new
end
def create
if request.post?
@chat_room = ChatRoom.new(params[:chat_room])
if @chat_room.save
flash[:message] = 'Pokój został utworzony'
redirect_to :action => :index
else
render :action => :new
end
else
redirect_to :action => :index
end
end
def edit
@chat_room = ChatRoom.find(params[:id])
end
def update
if request.put?
@chat_room = ChatRoom.find(params[:id])
@chat_room.update_attributes(params[:chat_room])
if @chat_room.save
flash[:message] = 'Pokój został uaktualniony'
redirect_to :action => :index
else
render :action => :edit
end
else
redirect_to :action => :index
end
end
def destroy
chat_room = ChatRoom.find(params[:id])
chat_room.delete
flash[:message] = 'Pokój został usunięty'
redirect_to :action => :index
end
end
Oraz odpowiednie widoki do niego:
index.rb:
<table id="room_list">
<tr>
<th>Nazwa</th>
<th>Skrót</th>
<th>Edytuj</th>
<th>Usuń</th>
</tr>
<% @chat_rooms.each do |room| %>
<tr>
<td><%= room.name %></td>
<td><%= room.link %></td>
<td><%= link_to "Edytuj",edit_chat_room_path(room) %></td>
<td><%= link_to "Usuń", chat_room_path(room), :confirm => "Jesteś pewien?", :method => :delete %></td>
</tr>
<% end %>
</table>
<br/>
<%= link_to "Dodaj nowy pokój", new_chat_room_path %>
new.rb:
<h2>Tworzenie pokoju</h2> <%= error_messages_for :chat_room %> <% form_for :chat_room, :url => chat_rooms_path do |f| %> Nazwa: <%= f.text_field :name %> <%= submit_tag "Zapisz" %> <% end %>
Oraz edit.rb:
<h2>Edycja pokoju</h2> <%= error_messages_for :chat_room %> <% form_for @chat_room, :method => :put do |f| %> Nazwa: <%= f.text_field :name %> <%= submit_tag "Zapisz" %> <% end %>
I to by było na tyle na IV część toturiala. W tej części utworzyliśmy model pokoju i jego obsługę dla administratora. Od teraz możemy tworzyć i edytować pokoje w naszym czacie. Jak połączyć to z Juggernautem dowiemy się z części V i (może) VI jeśli część V okaże się za długa ;)
Części tutorialu:
- Juggernaut Rails Chat – część I (czym jest Juggernaut i jak go zainstalować)
- Juggernaut Rails Chat – część II (design)
- Juggernaut Rails Chat – część III (rejestracja i logowanie)
- Juggernaut Rails Chat – część IV (zarządzanie pokojami)
- Juggernaut Rails Chat – część V (łączenie użytkowników z pokojami)
- Juggernaut Rails Chat – część VI (odpalamy Juggernaut i nasz chat)
- Juggernaut Rails Chat – część VII (emotikonki i dźwięk)
