Минулого разу ми додали можливість керувати(створювати, редагувати і видаляти) повідомленнями блогу і відображати їх на головній сторінці. Але ми пропустили одну важливу властивість у моделі Post - дату створення/редагування повідомлення.
Модифікація моделі Post
Оновимо модель Post і додамо дві нових властивості created_at і updated_at# app/models/post.rb
class Post
include DataMapper::Resource
# property <name>, <type>
property :id, Serial
property :title, String
property :body, Text
property :created_at, DateTime
property :updated_at, DateTime
end
Властивість created_at по замовчуванню заповнюється часом створення запису, а updated_at - часом оновлення запису. Докладно про ці поля можна дізнатися з офіційної документації DataMapper.
Далі генеруємо нову міграцію для бази даних.
$ /opt/ruby191/bin/padrino-gen migration AddTimestamp
=> Located unlocked Gemfile for development
apply orms/datamapper
create db/migrate/003_add_timestamp.rb
Редагуємо db/migrate/003_add_timestamp.rb.
migration 3, :add_timestamp do
up do
modify_table :posts do
add_column :created_at, DateTime
add_column :updated_at, DateTime
end
end
down do
modify_table :posts do
remove_column :created_at, DateTime
remove_column :updated_at, DateTime
end
end
end
І власне здійснюємо саму міграцію.
$ /opt/ruby191/bin/padrino rake dm:migrate
=> Executing Rake dm:migrate ...
== Performing Up Migration #3: add_timestamp
ALTER TABLE "posts" ADD COLUMN "created_at" TIMESTAMP
-> 0.0232s
ALTER TABLE "posts" ADD COLUMN "updated_at" TIMESTAMP
-> 0.0029s
-> 0.0266s
<= dm:migrate:up executed
Тепер все готово. І у моделі Post з’явилося дві нових властивості. Зробимо, щоб повідомлення виводилися на головну сторінку в порядку спадання дати створення.
# app/controllers/posts.rb
SampleBlog.controllers :posts do
get :index do
@posts = Post.all(:order => [:created_at.desc])
render 'posts/index'
end
end
Асоціація між моделями Post і Account
Переглянемо модель Post. Почнемо з додавання нової міграції, щоб приєднати облікові записи(Account) до повідомлень(Post).$ /opt/ruby191/bin/padrino-gen migration AddAccountToPost account_id:integer
=> Located unlocked Gemfile for development
apply orms/datamapper
create db/migrate/004_add_account_to_post.rb
Це створить нову міграцію з необхідними полями, щоб приєднати account_id до повідомлення. Повернемося до моделі Post, щоб встановити асоціації і додати деякі перевірки.
# app/models/post.rb
class Post
belongs_to :account
validates_present :title
validates_present :body
end
Виконуємо міграцію бази даних.
$ /opt/ruby191/bin/padrino rake dm:migrate
=> Executing Rake dm:migrate ...
== Performing Up Migration #4: add_account_to_post
ALTER TABLE "posts" ADD COLUMN "account_id" INTEGER
-> 0.0068s
-> 0.0071s
<= dm:migrate:up executed
Оновлення інтерфейсу адміністратора
Тепер коли модель Post має відповідні асоціації і перевірки, перейдемо в інтерфейс адміністратора Padrino і внесемо деякі зміни, щоб включити облікові записи у повідомлення. Відкриваємо файл admin/controllers/posts.rb і включаємо current_account до створення нового повідомлення.# admin/controllers/posts.rb
Admin.controllers :posts do
# ...
post :create do
@post = Post.new(params[:post])
@post.account = current_account # <-- add
if @post.save
flash[:notice] = 'Повідомлення було успішно створене.'
redirect url(:posts, :edit, :id => @post.id)
else
render 'posts/new'
end
end
# ...
end
Оновимо форму для додавання нових повідомлень, щоб показати зміни, які ми зробили.
# app/views/posts/show.haml
- @title = @post.title
#show
.post
.title= @post.title
.date= time_ago_in_words(@post.created_at || Time.now) + ' тому'
.body= simple_format(@post.body)
.details
.author Написано #{@post.account.email}
%p= link_to 'Дивитись всі записи', url_for(:posts, :index)
# app/views/posts/_post.haml
.post
.title= link_to post.title, url_for(:posts, :show, :id => post.id)
.date= time_ago_in_words(post.created_at || Time.now) + ' тому'
.body= simple_format(post.body)
.details
.author Написано #{post.account.email}
Тепер ми можемо створити декілька користувачів, які можуть писати повідомлення до блогу.
Макет сайту
Тепер коли додаток налаштований і сервер запущений, давайте створимо кілька основних стилів CSS.По-перше, створимо макет нашого додатку. Макет являє собою файл, який діє як контейнер для утримання шаблону. Він використовується для створення єдиного дизайну для кожної сторінки сайту. Ми створимо макет, просто додавши файл у директорію app/views/layout.
-# app/views/layouts/application.haml
!!! Strict
%html
%head
%title= [@title, "Блоґ"].compact.join " | "
= stylesheet_link_tag 'application'
= javascript_include_tag 'jquery', 'application'
= yield_content :include
%body
#header
%h1 Мій персональний блоґ
%ul.menu
%li= link_to "Блоґ", url_for(:posts, :index)
#container
#main= yield
#sidebar
- form_tag url_for(:posts, :index), :method => 'get' do
Пошук
= text_field_tag 'query', :value => params[:query]
= submit_tag 'Пошук'
%p Останні повідомлення
%ul.bulleted
%li Item 1 - Lorem ipsum dolorum itsum estem
%li Item 2 - Lorem ipsum dolorum itsum estem
%li Item 3 - Lorem ipsum dolorum itsum estem
%p Останні коментарі
%ul.bulleted
%li Item 1 - Lorem ipsum dolorum itsum estem
%li Item 2 - Lorem ipsum dolorum itsum estem
%li Item 3 - Lorem ipsum dolorum itsum estem
#footer
Copyright (c) 2010 ruby-ua
Цей макет створюю базову структуру нашого майбутнього блогу, і потребує необхідних стилів CSS і файлів JavaScript для контролювання вигляду і поведінки сайту. Також він включає декілька порожніх елементів, таких як рядок пошуку та блоки для останніх повідомлень і коментарів.
Далі нам просто потрібно налаштувати стиль, який ми вказали у рядку
= stylesheet_link_tag 'application'
Це робиться шляхом редагування файлу app/stylesheets/application.sass. Створення стилю CSS не розглядається в рамках цієї статті і віддається на відкуп читачу.
За основу цієї статті було взяте керівництво Blog Tutorial з офіційного сайту Padrino. Відповідно, у якості стилю можна використати application.sass з репозиторію. Після цього, наш блог матиме наступний вигляд:
Немає коментарів:
Дописати коментар