1. Welcome
  2. Getting Started [+/-]
    1. Installing from RubyGems
    2. Installing from GitHub.com
    3. Installing with Sake
  3. The Basics [+/-]
    1. Hello World
      1. Application Generation Options
    2. Paths
    3. Environments
    4. Rake
  4. Configuration [+/-]
    1. Configatron
    2. Initializers
      1. Gems
      2. Mime-Types
  5. Routing [+/-]
    1. Default Routes
    2. Named Routes
    3. RESTful/Resource Routes
    4. Nested Resource Routes
    5. Regex Routes
    6. Wildcard Routes
    7. Blocks in Routes
    8. Redirecting
    9. Error Handling
    10. Deferred? Routes
    11. Misc. Routing
  6. Controllers [+/-]
    1. Actions
    2. Headers/Status
    3. Handling Content Types
    4. Filters
    5. Helpers
    6. Layouts
    7. Tell Messaging
    8. Redirecting
    9. Rendering
      1. Engines
        1. Erubis
        2. XML Builder
        3. Extending
          1. Case Study: PDF Writer
      2. Types
        1. :action
        2. :text
        3. :inline
        4. :xml
        5. :url
        6. :partial
        7. :template
        8. :public
        9. Extending
          1. Case Study: PDF Writer
  7. Views [+/-]
    1. Helpers
    2. Layouts
    3. Assets Host
    4. Assets Management
    5. Form Builders
  8. Sessions [+/-]
    1. Session Store API
  9. Request/Response [+/-]
    1. Cookies
  10. Testing [+/-]
    1. RSpec
    2. Test::Unit::TestCase
  11. Porlets [+/-]
    1. Developing
    2. Testing
    3. Packaging
    4. Using
  12. Plugins [+/-]
    1. Extending
      1. Case Study: PDF Writer
  13. Deploying [+/-]
    1. Thin
    2. Passenger (mod_rails)
    3. Joyent Accelerator
  14. Mack More [+/-]
    1. mack-active_record
    2. mack-asset_packager
    3. mack-caching
    4. mack-data_factory
    5. mack-data_mapper
    6. mack-distributed
    7. mack-encryption
    8. mack-facets
    9. mack-haml
    10. mack-javascript
    11. mack-localization
    12. mack-markaby
    13. mack-notifier
    14. mack-orm
    15. mack-pdf_writer
  15. Rails to Mack Cheat Sheet
  16. Contributing
  17. APIs [+/-]

Actions

Actions are ultimately what respond to the request from the client. They are defined as methods on your controller class.

Simple

# app/controllers/users_controller.rb
class UsersController
  include Mack::Controller

  def show
    @user = User.first(params[:id])
  end

end

# config/routes.rb
Mack::Routes.build do |r|
  r.resources :users
end

# app/views/users/show.html.erb

Hello '<%= @user.display_name %>'

When a request comes in with the url '/users/1' it gets routed to the UsersController and the show action. A User is looked up from the database, let's say, based on the id parameter from the url. Once the user is found an instance variable, @user is set, and the action returns. Mack then renders the app/views/users/show.html.erb template, which has access to the instance variables set by the action in the controller.

No Action Defined

An action method doesn't necessarily have to be defined for a request to still be handled by the view template for our action:

# app/controllers/users_controller.rb
class UsersController
end

# config/routes.rb
Mack::Routes.build do |r|
  r.say_hi '/users/say_hi', :controller => :users, :actions => :say_hi
end

# app/views/users/say_hi.html.erb

Hello World!

When the request comes in for '/users/say_hi' Mack will see that there is no say_hi action in the UsersController so it will attempt to find the say_hi.html.erb template on disk. Finding that it will render and return that template.

No Action and No Template

If a request comes in and there is no action and template defined Mack will attempt to find a static page in the public directory that matches the uri path, if one is found, then that static page is returned, otherwise a Mack::Errors::ResourceNotFound error is raised.

NOTE: For an action to be able to respond to a request it has to be public. If the action is any other state, say protected or private, it will not be able to respond to the request.

This guide was written for Mack version 0.8.2