【发布时间】:2010-10-25 07:37:02
【问题描述】:
我有一个如下所示的 Rack 应用程序:
class Foo
def initialize(app)
@app = app
end
def call(env)
env["hello"] = "world"
@app.call(env)
end
end
将我的 Rack 应用程序连接到 Rails 后,如何从 Rails 中访问env["hello"]?
更新:感谢 Gaius 的回答。 Rack and Rails 允许您在请求期间或会话期间存储内容:
# in middleware
def call(env)
Rack::Request.new(env)["foo"] = "bar" # sticks around for one request
env["rack.session"] ||= {}
env["rack.session"]["hello"] = "world" # sticks around for duration of session
end
# in Rails
def index
if params["foo"] == "bar"
...
end
if session["hello"] == "world"
...
end
end
【问题讨论】:
-
您确定
Rack::Request.new(env)["foo"] = "bar"改变了Rails 的任何内容吗?从源代码中我可以看到,应该改变的只是Rack::Request对象本身的一个实例变量。甚至the docs for that method 说:“请注意,修改不会保留在环境中。如果您想破坏性地修改参数,请使用 update_param 或 delete_param。”
标签: ruby-on-rails ruby rack middleware