Sinatra Sinatra 多个路由如何合并?

femind · 2015年09月11日 · 最后由 fighterleslie 回复于 2016年01月17日 · 5888 次阅读

正在学习 Ruby,最近在折腾 Sinatra。网站的后台有几个页面,全都需要后台数据库传参过来,所以我写成这样

get '/background/' do
    erb :background,:layout => :bg_layout, :locals => {article: article_list}
end

get '/background/user' do
    erb :background_user,:layout => :bg_layout, :locals => {article: article_list}
end

get '/background/write' do
    erb :background_write,:layout => :bg_layout, :locals => {article: article_list}
end

end

几个页面需要调用的都是相同的模板和相同的参数。我想知道有没有什么方法可以将它们合并在一起,避免代码重复。百度了好久都得不到解决。

get '/background/:action'

get %r{/background(|/user/write)/?\Z} do

没用过 Sinatra,纯猜测。

建議用 roda 或者 cuba,render 代碼要去官網參考

get 'background' do
  articles = article_list
  is '' do
    erb :background,:layout => :bg_layout, :locals => {article: article_list}
  end

  is 'user' do
    erb :background_user,:layout => :bg_layout, :locals => {article: article_list}
  end

  is 'write' do
    erb :background_write,:layout => :bg_layout, :locals => {article: article_list}
  end
end

官方文档第一部分就是路由……

get '/hello/:name' do
  # matches "GET /hello/foo" and "GET /hello/bar"
  # params['name'] is 'foo' or 'bar'
  "Hello #{params['name']}!"
end

个人推荐

gem "sinatra-contrib", "~>1.4.2"
require "sinatra/multi_route"

route :get, :post, "/" do
  // todo
end

route "/one", "/two" do
  // todo
end

http://www.sinatrarb.com/contrib/multi_route.html https://github.com/sinatra/sinatra-contrib

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册