use*_*052 10 ruby variables middleware ruby-on-rails ruby-on-rails-3
我正在使用Ruby on Rails 3,我正在尝试使用中间件来设置@variable_name稍后在控制器中可访问的变量.
例如,我的中间件是
class Auth
def initialize(app)
@app = app
end
def call(env)
@account ||= Account.find(1)
@app.call(env)
end
end
Run Code Online (Sandbox Code Playgroud)
上面的代码正确设置了@account变量,但是在我的应用程序中没有(在控制器,模型,视图......中).那么,我该怎么做呢?
我看到这个答案是一种做我需要的方法,但我希望@account变量"可以直接访问".也就是说,不使用那种方式,但使其可用,例如在我的视图中,像这样:
<%= debug @account %>
Run Code Online (Sandbox Code Playgroud)
wan*_*lke 22
您可以使用'env'.所以在你的中间件中你这样做:
def call(env)
env['account'] = Account.find(1)
@app.call(env)
end
Run Code Online (Sandbox Code Playgroud)
您可以在应用中使用"请求"获取值:
request.env['account']
Run Code Online (Sandbox Code Playgroud)
请不要使用全局变量或类属性,因为有些人在这里建议.这是让自己陷入麻烦的可靠方法,而且确实是一种坏习惯.
| 归档时间: |
|
| 查看次数: |
3329 次 |
| 最近记录: |