Rails: first steps
Робко и нерешительно я начал делать первые шаги по рельсам. И что я могу сказать - мне нравится.
Первое с чем я пока столкнулся - с ковырянием в БД. Реализация - просто зверь!
Миграции - это нечто. Итак, для начала имеем пустую миграцию - версия 0. Далее была создана миграция (автоматом) v1. Что есть миграция? Вот что:
[cc lang="rails"]
class CreateNews "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_unicode_ci" do |t|
t.column :title, :string, :limit=>255, :null => false
t.column :teaser, :text, :null => false
t.column :body, :text, :null => false
t.column :created_at, :datetime, :null => false
t.column :updated_at, :datetime, :null => false
end
end
def self.down
drop_table :newsend
end[/cc]
По привычке у меня установлен mysql (v5). И когда первый разописал структуру, тотекстовые данные сплошь были latin1. Потому в опциях добавил кодировку. Но после этого таблица стала не InnoDB! Оказалось, что по умолчанию рельсы создают таблицы типа InnoDB, если другое не указано в опциях. Как только добавляешь опции - требуется указать и таблицу. Ну вот и указал.
У многих возникает вопрос: а зачем же описывать структуру БД в коде? А для того, чтоб можно было красиво и легко переходить между изменениями, внесенными в процессе разработки. И не говорите, что БД спроектированная в начале работы над проектом не меняется никогда- не поверю, сам давно так думал, но всегда что-то но менялось.
И вот можно в следующей миграции описать какие поля добавить, что где поменять и т.п. - и в консоли на сервере сделать rake db:migrate VERSION=x. Разве это не удобно? Например, при откате на предыдущую версию тут же можно описать какие действия выполнять.
Ну и кроме миграций есть еще один плюс, который бросился мне в глаза: ведь эту же структуру не изменяя (вероятней всего, еще не пробовал) можно загнать и в PostgreSQL, и хоть в оракл.
И после этого - вот такой код для выбора всех новостей:
[cc lang="rails"]
def index
@news = News.find(:all)
end[/cc]
После написания таких кусочков задумался, а как же реализованы шаблоны и сильно порадовался - есть такая штука как layout и, собственно, view. View используется для отображения конкретного куска, а layout и есть шаблон всей страницы.
Layout:
[cc lang="rails"]
[/cc]
View:
[cc lang="rails"]