Туторіал по Merb

Цей туторіал покаже як створити простеньку аплікацію на Merb.

Merb вимагає принаймні RubyGems 1.3. Якщо у вас старіша версія то необхідно оновити. Також має бути встановлений Mongrel. Якщо часом Mongrel не стоїть то необхідно його поставити:


gem install mongrel


Інсталюємо Merb на Windows наступною командою:


gem install merb


Або на Лінуксі:


$ sudo gem install merb


На момент написання статті була доступна версія 1.0.8 яка мала певні проблеми під Windows. Якщо у вас виникли проблеми при встановлені, необхідно виконати наступні кроки.
  1. В ручну скачати do_sqlite3-0.9.10.1-x86-mswin32.gem наприклад з http://rubyforge.vm.bytemark.co.uk/gems/

  2. Встановити:



gem install do_sqlite3-0.9.10.1-x86-mswin32.gem


Після цього попробувати ще раз встановити merb.

Коли все готово то можна приступити до створення аплікації:


merb-gen app blog --template-engine=haml


Ця команда створить папку з іменем «blog» і помістить туди файли аплікації. Останній ключ вибере Haml як двигун представлення. Також доступний є Erb.

Щоб продовжити процес слід перейти в щойно створену папку:


cd blog


Почнемо створювати моделі. З початку створимо модель допису (post):


merb-gen resource post title:string,body:string


Далі модель коментаря (comment):


merb-gen resource comment post_id:integer,name:string,body:string


Щоб гарно працювали REST посилання слід поміняти у файлі config/router.rb з:


Merb::Router.prepare do
resources :comments
resources :posts

...
end


на

Merb::Router.prepare do
resources :posts do |post|
post.resources :comments
end

...
end


Коли REST посилання готові слід додати до моделей зв'язки

Файл app/models/post.rb слід змінити наступним чином.

class Post
include DataMapper::Resource

property :id, Serial

property :body, String
property :title, String

has n, :comments
end

Передостання стрічка додає зв'язок до коментарів. Файл app/models/comment.rb слід змінити наступним чином:


class Comment
include DataMapper::Resource

property :id, Serial

property :name, String
property :body, String
property :post_id, Integer

belongs_to :post

end


Передостання стрічка вказує на зв'язок з дописами.

Коли моделі готові можна приступити до представлень. В папці app/views/posts відредагуйте файл new.html.erb наступним чином:


= error_messages_for :post

= form_for(@post, :action => url(:posts) ) do
= partial :form
%p= submit "Create"

= link_to 'Back', url(:posts)


Файл edit.html.haml наступним чином:


= error_messages_for :post

= form_for(@post, :action => url(:post, @post)) do
= partial :form
%p= submit "Update"

= link_to 'Show', url(:post, @post)
|
= link_to 'Back', url(:post)


Далі створіть часткове представлення (partial) з іменем "_form.html.haml" та наступним вмістом:


%p= text_field :title
%p= text_area  :body


Файл index.html.haml слід змінити наступним чином:


%table
%tr
- for post in @posts
%td= post.title
%tr
%td= link_to 'Show', url(:post, post)
%td= link_to 'Edit', url(:edit_post,  post)

= link_to 'New', url(:new_post)


Файл show.html.haml наступним чином:


%p= @post.title
%p= @post.body

%br/
%hr/
%h1 Comments
%p= partial "comments/show", :with => @post.comments.reverse, :as => :comment

%hr/
%p= partial("comments/comment")

= link_to 'Edit', url(:edit_post,  @post)
|
= link_to 'Back', url(:posts)


Коли дописи готові, переходимо до представлень коментарів. В папці app/views/comments створіть часткове представлення з іменем "_show.html.haml" та наступним вмістом:


%p= comment.name
%p= comment.body


Також створіть представлення з іменем "_comment.html.haml" та вмітом:


%p= error_messages_for :comment

= form_for(:comment, :action => "/posts/#{@post.id}/comments") do
%p= text_field :name, :name => "comment[name]"
%p= text_area  :body
%p= submit "Comment"


З представленнями все. Приступаємо до контроллерів. Щоб запрацювали звязки слід змінити метод create котроллера коментарів наступним чином:


def create(comment)
@post = Post.get(params[:post_id])
@comment = Comment.new(comment.merge(:post => @post))
if @comment.save
redirect resource(@post), :message => {:notice => "Comment was successfully created"}
else
message[:error] = "Comment failed to be created"
render :new
end

end


Все! Можна запускати. З початку мігруємо моделі наступною командою:


rake db:automigrate


Після міграції запускаємо веб сервер:


merb


І спрямовуємо бровсер на: http://localhost:4000/posts

Звичайно до потужних блогосервісів нашій аплікації далеко, але у ній зібрані і з'єднані всі важливі елементи Merb.

За основу цього туторіала була взята частина документації.

Якщо зіткнулись з певними труднощами — будь ласка пишіть в коментарі.
#
mux

  • 0
  • 13 травня 2009, 18:13

Коментарі (3)

RSS згорнути / розгорнути
+
+1
а чи буде туторіал по ruby on rails?
avatar

blaster

  • 16 травня 2009, 10:12
+
+1
буде ;)
avatar

mux

  • 16 травня 2009, 10:14
+
0
Яка різниця між render i display?
avatar

Niko

  • 14 листопада 2010, 14:03

Тільки зареєстровані й авторизовані користувачі можуть залишати коментарі.