2013-10-05 83 views
7

我正在使用Devise 3.1.1進行用戶認證的Rails 4應用程序。當我在/users/sign_up.user鏈接Rails的點擊例外拋出以下幾點:Rails 4 Devise 3.1.1 ActionController :: UnknownFormat in Devise :: RegistrationsController#new

ActionController::UnknownFormat in Devise::RegistrationsController#new 
ActionController::UnknownFormat 

Rails.root: /home/rehan/odesk_work/kiefer-waight/ujoin/ujoin-www 

Application Trace | Framework Trace | Full Trace 
actionpack (4.0.0) lib/action_controller/metal/mime_responds.rb:372:in `retrieve_collector_from_mimes' 
actionpack (4.0.0) lib/action_controller/metal/mime_responds.rb:327:in `respond_with' 
devise (3.1.1) app/controllers/devise/registrations_controller.rb:8:in `new' 
actionpack (4.0.0) lib/action_controller/metal/implicit_render.rb:4:in `send_action' 
actionpack (4.0.0) lib/abstract_controller/base.rb:189:in `process_action' 
actionpack (4.0.0) lib/action_controller/metal/rendering.rb:10:in `process_action' 
actionpack (4.0.0) lib/abstract_controller/callbacks.rb:18:in `block in process_action' 
activesupport (4.0.0) lib/active_support/callbacks.rb:413:in `_run__890637270__process_action__callbacks' 
.... 

我實際上是在制定3.0.0.rc啓動應用程序時,我還以爲色器件升級到3.1.1會解決問題,但事實並非如此。在SO/google/devise github項目中找不到任何有用的東西。任何想法如何解決它。謝謝!

回答

13

我不想更改由每個鏈接末尾附加「.user」的Devise生成的默認鏈接。設計產生以下鏈接:

new_user_registration_path(resource_name) new_user_session_path(resource_name) new_user_password_path(resource_name)

RESOURCE_NAME,這是用戶,作爲參數傳遞給在的link_to方法告訴它用「用戶」作爲格式的路徑。所以我只是從每個路徑中刪除了resource_name。我想知道爲什麼設計這樣做,但!

+0

我也不知道他們爲什麼需要'resource'作爲參數。我刪除了我的情況下,參數和它的工作。 –

0

當你說你點擊/users/sign_up.user鏈接時,你的字面意思是否確切的路徑?因爲.user最終告訴它嘗試使用user格式進行響應,類似於pdf,xmljson。刪除它,看看會發生什麼。

3

@ zeeshan的答案的作品,也可以不_user綴功能:

new_registration_path(resource_name) 

new_session_path(resource_name) 

new_password_path(resource_name) 
1

我剛剛解決了這個問題也。

解決方案是恢復到Devise默認的所有路徑,意思就是說沒有_user中綴。

請注意,我們無法控制檯來測試這些代碼:

user = User.all.sample 
app.new_registration_path(user) 

因爲設計使用其helper改造URL自動在內部,所以我們不能從外部測試。

相關問題