The following application represents a typical pre-Rails 2.0 blog application, similar to David Heinemeier Hansson's--the creator and architect of Ruby on Rails-- famous "15 Minute Blog" demonstration. You'll note that many things have been removed for the sake of brevity. Features like pagination, notice messages and so forth have been removed but do not effect the function of the application.
It's assumed that this Rails application was generated with a version of Rails before 2.0. This means features like protect_from_forgery are not enabled and normal routes are used instead of RESTful resources. Though Rails 2.0 and later versions do not generally suffer from such problems, projects ported from earlier versions of Rails often do.
# File: app/controllers/posts_controller.rb class PostsController < ApplicationController before_filter :login_required, :except => [ :index, :show ] def index @posts = Post.find :all end def new @post = Post.new end def create @post = Post.new(params[:post]) @post.user = current_user if( @post.save ) flash[:notice] = "Post created." redirect_to :action => 'show', :id => @post.id else render :action => 'new' end end def edit @post = Post.find(params[:id]) end def update @post = Post.find(params[:id]) if( @post.update_attributes params[:post] ) flash[:notice] = "Post updated." redirect_to :action => 'show', :id => @post.id else render :action => 'edit' end end def show @post = Post.find(params[:id]) end def destroy @post = Post.find(params[:id]) @post.destroy flash[:notice] = "Post destroyed." redirect_to :action => 'index' end end # File: app/controllers/application.rb class ApplicationController < ActionController::Base include AuthenticatedSystem end # File: app/models/post.rb class Post < ActiveRecord::Base belongs_to :user validates_presence_of :title, :body validates_length_of :title, :within => 3..100 end # File: config/routes.rb ActionController::Routing::Routes.draw do |map| map.connect ':controller/:action/:id' end