Stage for Merb¶
Merb Instructions¶
Installing¶
sudo gem install stage
Demonstration of usage¶
$ merb-gen stage page title:string content:text exists app exists app/controllers exists app/helpers exists app/models exists app/views create app/views/pages create app/controllers/pages.rb create app/helpers/pages_helper.rb create app/models/page.rb create app/views/pages/_data.html.erb create app/views/pages/_form.html.erb create app/views/pages/edit.html.erb create app/views/pages/index.html.erb create app/views/pages/new.html.erb create app/views/pages/show.html.erbThe controller generated:
class Pages < Application
before :find_page, :only => [:show, :edit, :update, :delete]
def index
@pages = Page.all
display @pages
end
def show
display @page
end
def new
only_provides :html
@page = Page.new
render
end
def edit
only_provides :html
render
end
def create
@page = Page.new(params[:page])
if @page.save
redirect url(:page, @page)
else
render :new
end
end
def update
if @page.update_attributes(params[:page])
redirect url(:page, @page)
else
raise BadRequest
end
end
def delete
if @page.destroy!
redirect url(:page)
else
raise BadRequest
end
end
private
def find_page
@page = Page.first(params[:id])
raise NotFound unless @page
end
end
The edit page:
<h1>Editing page</h1>
<%= partial "form" %>
<%= link_to 'Show', url(:page, @page) %> |
<%= link_to 'Back', url(:pages) %>
The form partial:
<%
submit_label = "Update"
submit_label = "Create" if @page.new_record?
-%>
<%= error_messages_for @page %>
<% form_for(:page, :action => url(:page,@page)) do %>
<%= partial :data %>
<p> <%= submit_button submit_label %> </p>
<% end %>
The data partial (the show view calls this directly):
<p>
<b>Title</b><br />
<%= page_title_value %>
</p>
<p>
<b>Content</b><br />
<%= page_content_value %>
</p>
As you can see, there are <model>_<field>_value methods. These are defined in the pages helper:
module Merb
module PagesHelper
def page_title_value
if @action_name == "show"
@page.title
else
text_field :name => "page[title]", :value => @page.title
end
end
def page_content_value
if @action_name == "show"
@page.content
else
text_field :name => "page[content]", :value => @page.content
end
end
end
end
I need to get more precise with the form helpers, but for now this will do.