如何访问rails metal中的flash消息

时间:2011-02-03 21:20:45

标签: ruby-on-rails rack

我的一个操作是页面缓存,因此服务器只读取HTML。只有一些部分是动态的,我通过AJAX调用访问这些部分到rails metal端点。

我正在尝试在通话中返回flash [:notice]和/或flash [:alert]通知,但我一直收到一个神秘的错误(如下)。有没有办法通过rails metal访问flash消息?

我的金属类中的代码是:

json = "{flash : '#{flash[:notice]}' , user_balance : #{@user.balance.to_i}, cart_items : #{bal} }"
[200, {"Content-Type" => "application/json"}, [json] ]

错误:

Thu Feb 03 13:01:20 -0800 2011: Read error: #<NoMethodError: undefined method `bytesize' for nil:NilClass>
/home/brycemcd/.rvm/gems/ruby-1.8.7-p330/gems/activesupport-2.3.5/lib/active_support/whiny_nil.rb:52:in `method_missing'
/home/brycemcd/.rvm/gems/ruby-1.8.7-p330/gems/rack-1.0.1/lib/rack/utils.rb:156:in `bytesize'
/home/brycemcd/.rvm/gems/ruby-1.8.7-p330/gems/rack-1.0.1/lib/rack/content_length.rb:22:in `call'
/home/brycemcd/Projects/theclymb/app/metal/presentation_cache.rb:29:in `inject'

1 个答案:

答案 0 :(得分:1)

您可以在rack.session中找到您的Flash消息。使用Rack它在env变量中。 rack.session包含flash哈希:env["rack.session"]["flash"]["error"]env["rack.session"]["flash"]["notice"]或其他任何内容。

match "/hello" => proc { |env| [200, {}, "#{env['rack.session']['flash']['error']}"] }, :as => :hello