【发布时间】:2013-06-11 16:52:39
【问题描述】:
我在我的 Rails 项目中使用 Devise 身份验证 gem,我想更改它在 Flash 警报中使用的密钥。 (Devise 使用 :notice 和 :alert flash 键,但我想将它们更改为 :success 和 :error 以便我可以用Bootstrap 显示漂亮的绿色/红色框。)
所以我希望能够以某种方式覆盖DeviseController 中的set_flash_message 方法。
这是新方法:
def set_flash_message(key, kind, options = {})
if key == 'alert'
key = 'error'
elsif key == 'notice'
key = 'success'
end
message = find_message(kind, options)
flash[key] = message if message.present?
end
但我就是不知道该放在哪里。
更新:
根据答案,我创建了一个 config/initializers/overrides.rb 文件,其中包含以下代码:
class DeviseController
def set_flash_message(key, kind, options = {})
if key == 'alert'
key = 'error'
elsif key == 'notice'
key = 'success'
end
message = find_message(kind, options)
flash[key] = message if message.present?
end
end
但这会导致每个设计操作出错:
路由错误:未定义的方法“prepend_before_filter” 设计::SessionsController:Class
【问题讨论】:
-
您可能需要声明 DeviseController 的文件。我通常会使用
DeviseController.class_eval而不是重新打开该类以确保它已被声明。 -
@aceofspades- 你能把这个扩展成答案吗?我以前没有用过 .class_eval ,想看看你的想法..
标签: ruby-on-rails ruby devise rubygems monkeypatching