# config.ru
require 'bundler/setup'
run Proc.new {|env|
if env["PATH_INFO"] == "/"
[200, {"Content-Type" => "text/html"}, ["<h1>Hello World</h1>"]]
else
[404, {"Content-Type" => "text/html"}, ["<h1>Not Found</h1>"]]
end
}
可通过 rackup config.ru 运行以上代码,默认在 可以查看运行结果。
引入 Action Dispatch & 纯手动实现 Controller#actions
# config.ru
require 'bundler/setup'
require 'action_dispatch'
routes = ActionDispatch::Routing::RouteSet.new
routes.draw do
get '/' => 'mainpage#index'
# 和以下写法效果一样,但'这里'要把它定义在 MainpageController 后面
# get '/' => MainpageController.action("index")
get '/page/:id' => 'mainpage#show'
end
class MainpageController
def self.action(method)
controller = self.new
controller.method(method.to_sym)
end
def index(env)
[200, {"Content-Type" => "text/html"}, ["<h1>Front Page</h1>"]]
end
def show(env)
[200, {"Content-Type" => "text/html"},
["<pre> #{env['action_dispatch.request.path_parameters'][:id]} #</pre>"]]
end
end
run routes
引入 Action Controller,使用 Metal
# config.ru
require 'bundler/setup'
require 'action_dispatch'
require 'action_controller'
routes = ActionDispatch::Routing::RouteSet.new
routes.draw do
get '/' => 'mainpage#index'
get '/page/:id' => 'mainpage#show'
end
class MainpageController < ActionController::Metal
def index
self.response_body = "<h1>Front Page</h1>"
end
def show
self.status = 404
self.response_body =
"<pre>#{env['action_dispatch.request.path_parameters'] [:id]}</pre>"
end
end
run routes
# config.ru
require 'bundler/setup'
require 'action_dispatch'
require 'action_controller'
routes = ActionDispatch::Routing::RouteSet.new
routes.draw do
get '/' => 'mainpage#index'
get '/page/:id' => 'mainpage#show'
end
class MainpageController < ActionController::Metal
include AbstractController::Rendering
include ActionController::Rendering
include ActionController::ImplicitRender
def index
# self.response_body = "<h1>Front Page</h1>"
@local_var = 12345
end
def show
self.status = 404
self.response_body =
"<pre>#{env['action_dispatch.request.path_parameters'] [:id]}</pre>"
end
def render_to_body(*args)
template = ERB.new File.read("#{params[:action]}.html.erb")
template.result(binding)
end
end
run routes
# index.html.erb
Number is: <%= @local_var %>
引进 Action View
# config.ru
require 'bundler/setup'
require 'action_dispatch'
require 'action_controller'
require 'action_view'
routes = ActionDispatch::Routing::RouteSet.new
routes.draw do
get '/' => 'mainpage#index'
get '/page/:id' => 'mainpage#show'
end
class MainpageController < ActionController::Metal
include AbstractController::Rendering
include ActionView::Rendering
include ActionController::Rendering
include ActionController::ImplicitRender
prepend_view_path('app/views')
def index
@local_var = 12345
end
def show
end
end
use ActionDispatch::DebugExceptions
run routes
# app/views/mainpage/index.html.erb
Number is: <%= @local_var %>
# app/views/mainpage/show.html.erb
Content is: <pre><%= env['action_dispatch.request.path_parameters'][:id] %></pre>
# config.ru
# require 'bundler/setup'
# require 'action_dispatch'
# require 'action_view'
require 'action_controller'
routes = ActionDispatch::Routing::RouteSet.new
routes.draw do
get '/' => 'mainpage#index'
get '/page/:id' => 'mainpage#show'
end
class MainpageController < ActionController::Base
prepend_view_path('app/views/')
def index
@local_var = 12345
end
def show
end
end
use ActionDispatch::DebugExceptions
run routes
对应以上代码,我们需要创建视图文件。
# app/views/mainpage/index.html.erb
和
# app/views/mainpage/show.html.erb
其它
上述代码:
没有使用 Action Mailer,Active Job, Active Model, Active Record 等;
使用但没感受到 Abstract Controller,Active Support, Railties 等;
没有使用 Engine 等。