簡體   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