dsp*_*099 1 ruby model-view-controller routing sinatra
我想用Sinatra创建一个简单的实验性MVC框架.
我想按名称定义资源"pages",例如应该解决:
/pages (index)
/pages/new
/pages/:id/show (show)
Run Code Online (Sandbox Code Playgroud)
如同映射到app/controllers/PagesController.rb对应get('/')负责索引,post('/pages/create')负责创建等.
在阅读官方文档之后,我甚至感到非常困惑.我想我需要使用非经典的Sinatra模型,但有人能指出我正确的方向吗?
谢谢
如果你想要我认为你想要的东西,我会一直这样做.最初对于这个方案我使用travis-api源作为参考,但基本上你想要做的是在一个"控制器"类中扩展Sinatra :: Base,然后在机架中安装你的个人Sinatra"控制器",像这样:
module Endpoint
def self.included(base)
base.class_eval do
set(:prefix) { "/" << name[/[^:]+$/].downcase }
end
end
end
class Users < Sinatra::Base
include Endpoint
get '/' do
#logic here
end
get '/:id' do
#logic here
end
post '/' do
#logic here
end
patch '/:id' do
#logic here
end
end
class Posts < Sinatra::Base
include Endpoint
post '/' do
#logic here
end
end
Run Code Online (Sandbox Code Playgroud)
然后这样的事情:
class App
require "lib/endpoints/users"
require "lib/endpoints/posts"
attr_reader :app
def initialize
@app = Rack::Builder.app do
[Users, Posts].each do |e|
map(e.prefix) { run(e.new) }
end
end
end
def call(env)
app.call(env)
end
end
Run Code Online (Sandbox Code Playgroud)
你可以根据需要调整它,但想法是一样的,你将你的应用程序分成可组合的Sinatra应用程序,每个应用程序都有一个使用Rack安装的前缀.这个特殊的例子将为您提供以下路线:
得到'/ users'
获取'/ users /:id'
发布'/ users'
补丁'/ users /:id'
得到'/帖子'
| 归档时间: |
|
| 查看次数: |
2086 次 |
| 最近记录: |