繁体   English   中英

Sinatra erb文件中所有视图的变量

[英]Variables for all views in Sinatra erb files

在sinatra中分配可以在所有视图(所有erb文件)上使用的变量的最佳方法是什么。

我知道可以使用主文件中的全局变量(例如app.rb)来完成此操作,但是有没有更好的方法而不使用全局变量呢? 例如在app.rb中,我可以做:

@@a = "hello"
get '/' do
    erb :index
end

get '/hi' do
    erb :page
end

以及在index.erb和page.erb文件中:

<%= @@a %>

但是,有没有一种方法可以不使用全局变量呢?还是全局变量是做到这一点的最佳方法?

创建一个包含所有要访问的字符串/变量的常量的模块。 所有视图都可以访问您的模块:

module StringConstants
    LOGIN_PAGE = "Welcome to X"
    LOGOUT = "See you again soon"
end 

然后在您看来:

<%= StringConstants::LOGIN_PAGE %>

会话变量通常用于跨视图访问。 在sinatra中,这只是您的标准哈希:

session[:whatever] = "Hello"

设置后即可在任何地方访问。 它将在每个用户会话中独立存在。

例如,我使用的常见辅助对象是:

# set session[:user] = user's ID when they log in

def user
  @user ||= User.get(session[:user])
end

您可以使用user在视图或控制器中进行访问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM