ruby - Sinatra设置布局的方法

标签 ruby sinatra

我想在sinatra中写一个方法来设置布局,比如

def admin_layout
   set :layout, 'admin/layout'
end

我知道我可以做 set :erb, layout: :'main/layout' 之类的事情,或者为每个 Action 指定布局,例如

get 'admin/login' do
  erb :'admin/login', layout: :'admin/layout'
end

但我想知道是否有一种方法可以将其抽象为一个方法,这样我就不需要为每条路线设置布局。我正在制作一个带有 main 站点然后是 admin 站点的应用程序,但是管理部分非常轻量级,只需登录并能够编辑帖子,所以我不是试图变得太疯狂但我当前的文件结构是这样的:

db/
models/
public/
  views/
    admin/
    main/
app.rb
config.ru

最佳答案

定义布局参数:

def admin_layout
  {:layout, 'admin/layout'}
end

然后你可以使用这个方法作为参数,比如

get 'admin/login' do
  ## do ......
  erb :'admin/login', admin_layout
end

或者如果你想判断它将使用哪种布局,改变 admin_layout 功能,如:

def admin_layout
  if request.path.start_with?('/admin')
    {:layout, 'admin/layout'}
  else
    {:layout, 'layout'}
  end
end

关于ruby - Sinatra设置布局的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26080599/

相关文章:

ruby - capybara /sinatra 测试的 Rack 错误...似乎没有让 Sinatra 应用程序通过

ruby - 当 Content-Type 为 application/json 时自动使用 JSON 编码 Rack 输出

ruby - Ruby 中的动态状态机?状态机必须是类吗?

Ruby - 数组、边界和引发异常

ruby - 如何获取与某个正则表达式匹配的数组中元素的位置?

ruby - 在 Ruby 中,如何通过 Sinatra 获取 `li` 标记内的链接?

ruby-on-rails - 如何预编译 Assets 中的单个 css/js 文件?

ruby-on-rails - 让 Autotest 在 OS X 上与 Growl 一起工作

ruby - Sinatra 应用程序无法运行

CSS 应用于除一个页面之外的所有页面 - Ruby/Sinatra