2014-03-24 47 views
0

我有一個運行Devise 2.3的Rails 3.2應用程序。我保留電子郵件地址作爲默認身份驗證密鑰。當用戶嘗試使用現有電子郵件地址創建新帳戶時,我想向他顯示指向登錄和重置密碼頁面的鏈接。如何使用Devise在Rails中進行錯誤消息插值?

有一個answer to another question,建議如何在Rails中繼續使用它,但在使用Devise時不能解決問題。當試圖在電子郵件中定義自定義驗證時,服務器甚至不會啓動。 See the pastebin

有沒有一種方法可以覆蓋或劫持Devise添加的錯誤消息來代替我自己?或者是否有添加全局插值的方法?

這是我想顯示消息:

taken: email already used, please <a href='%{login_link}'>login</a> or <a href='%{reset_link}'>reset your password</a> 

該應用程序試圖顯示它,但抱怨缺少的插鑰匙。我如何通過Devise分配插值鍵來處理電子郵件中的驗證?

這可能不是這個問題的典型例子,因爲應用程序鏈接相當靜態,硬編碼在這裏可以。如果要插入其他真正動態的值呢?

+0

正如該文章中所建議的那樣,您是否在user.rb模型中傳遞了鏈接? – emcanes

+0

嘗試過,它與設計 – somecto

+0

失敗嘗試下面發佈的代碼。讓我知道什麼是失敗,我會很樂意幫助 – emcanes

回答

0

通過這些,只要設計的默認驗證是通過聲明的認證模式下使用AFAIK這是不可能的:

devise :validatable

爲了在使用Devise時在Rails中使用帶有YAML語言環境文件的錯誤消息變量插值,所有驗證都必須手動聲明,Devise提供的驗證必須是d eactivated。

當試圖覆蓋單個現有驗證時,Rails 3.2在初始化期間失敗。所以在使用Devise驗證時,這是全部或全部。

0

嘗試從user.rb文件

validates :email, :uniqueness => {:login_link => Rails.application.routes.url_helpers.new_user_session_path, 
            :reset_link => Rails.application.routes.url_helpers.new_user_password_path} 
+0

我以前試過,但它迄今失敗。 – somecto

+0

實際上,在user.rb中,服務器甚至不會啓動。 http://pastebin.com/SiNh9LjC – somecto

+0

是的,它可能不是要走的路。你不應該把它帶入模型。我將創建一個測試應用程序,看看我能想出什麼 – emcanes