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

时间:2015-12-28 14:52:34

标签: ruby sinatra erb

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

我知道可以使用主文件中的全局变量来完成,比如说app.rb但是有没有更好的方法可以不使用全局变量? 例如在app.rb中,我可以这样做:

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

get '/hi' do
    erb :page
end

并在index.erb和page.erb文件中:

<%= @@a %>

但有没有办法在不使用全局变量的情况下这样做,或者全局变量是最好的方法吗?

2 个答案:

答案 0 :(得分:1)

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

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

然后在你的观点中:

<%= StringConstants::LOGIN_PAGE %>

答案 1 :(得分:1)

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

session[:whatever] = "Hello"

一旦设定,就可以在任何地方访问。它将在每个用户会话中独立存在。

例如,我使用的常见助手是:

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

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

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