Rails 3.“flash”在某些页面上不起作用

时间:2012-03-07 16:11:17

标签: ruby-on-rails ruby haml erb

我正在使用“web_app_theme”宝石。问题是闪存错误和警告消息不起作用。

例如,在“登录”页面中它确实有效;但在“忘记密码”页面中它不起作用。我通过显示flash <%= debug flash %>的内容来测试它。

这是我在登录页面中得到的内容......

!ruby/object:ActionDispatch::Flash::FlashHash
          used: !ruby/object:Set
            hash:
              :alert: true
          closed: false
          flashes:
            :alert: Invalid email or password.
          now: !ruby/object:ActionDispatch::Flash::FlashNow

但是在Forgot Password页面我得到了......

!ruby/object:ActionDispatch::Flash::FlashHash
    used: !ruby/object:Set
      hash: {}
    closed: false
    flashes: {}
    now: !ruby/object:ActionDispatch::Flash::FlashNow

我认为它可能与不使用haml有关。在登录页面我使用haml,但在忘记密码页面我正在使用erb。我很困惑,因为无论格式如何,“flash”的内容都应该相同,对吧?

2 个答案:

答案 0 :(得分:0)

这与您使用的视图代码无关。

根据您的问题,很明显忘记密码页面中的闪存尚未设置。 要么已经设置和删除了。使用HAML或ERB无关紧要,因为两个页面中都存在Rails闪存。

检查控制器代码并验证该页面上闪存的内容。

此外,虽然没有严格的规则,但强烈建议在单个应用程序中仅使用一个模板/视图引擎(erb或haml)。

答案 1 :(得分:0)

在“忘记密码”页面上,是否设置了flash对象,然后呈现了页面,还是正在设置页面,然后重定向到页面发生?

flash的正常用例是您为其分配,然后重定向到存在闪存的另一个页面。如果您想使用flash,然后在同一操作中显示它的内容(例如渲染模板)

而不是写(例如)

flash[:notice] = 'Foo Bar'

你写

flash.now[:notice] = 'Foo Bar'