2013-12-15 66 views
1

與此命令我已生成的視圖後,我安裝設計滑軌添加新視圖制定

rails generate devise:views 

和我通過

class RegistrationsController < Devise::RegistrationsController 

    def sign_up2 

    end 
end 

重寫註冊控制器和帶有

devise_for :users, :controllers => { :registrations => "registrations" } 
更新的routes.rb

我期待看到一條新路線/觀點

/users/sign_up2 

,但我沒有看到它 這裏路線色器件

 new_user_session GET /users/sign_in(.:format)  devise/sessions#new 
      user_session POST /users/sign_in(.:format)  devise/sessions#create 
    destroy_user_session DELETE /users/sign_out(.:format)  devise/sessions#destroy 
      user_password POST /users/password(.:format)  devise/passwords#create 
     new_user_password GET /users/password/new(.:format) devise/passwords#new 
     edit_user_password GET /users/password/edit(.:format) devise/passwords#edit 
         PATCH /users/password(.:format)  devise/passwords#update 
         PUT /users/password(.:format)  devise/passwords#update 
cancel_user_registration GET /users/cancel(.:format)  registrations#cancel 
     user_registration POST /users(.:format)    registrations#create 
    new_user_registration GET /users/sign_up(.:format)  registrations#new 
    edit_user_registration GET /users/edit(.:format)   registrations#edit 
         PATCH /users(.:format)    registrations#update 
         PUT /users(.:format)    registrations#update 
         DELETE /users(.:format)    registrations#destroy 

但我想一個新的觀點和路線

更新:當我加載視圖 問題

First argument in form cannot contain nil or be empty 

在這一行

<%= form_for(resource, :as => resource_name,:html => { :class => "form-horizontal col-sm-12",:role=>"form"}, :url => user_registration_path(resource_name)) do |f| %> 
+0

你想添加什麼視圖和路線? – zeantsoi

+0

@zeantsoi sign_up2 – wwli

+0

瞭解。看看我的答案。 – zeantsoi

回答

3

調用一個devise_scope塊內聲明的自定義路線:

devise_for :users, :controllers => { :registrations => "registrations" } 
devise_scope :user do 
    get "users/sign_up2"=> "users/registrations#sign_up2", :as => "sign_up2_registration" 
end 

相應文件,Configuring routes部分提供的devise_scope如下解釋:

如果您有需要更深層次的定製,例如除了「/ users/sign_in」之外還允許「/ sign_in」,所有你需要做的就是正常創建你的路由並將它們包裝在路由器的devise_scope塊中

以前,Devise允許自定義路由作爲一個塊傳遞給devise_for,但是this behavior has been deprecated

UPDATE

爲了解決First argument in form cannot contain nil or be empty錯誤,你需要確保你的自定義sign_up2動作是否正確設置resource變量。假設你想模仿registrations/new動作,你可以做一些類似以下內容:

def sign_up2 
    build_resource({}) 
    respond_with self.resource 
end 

這將確保在您的視圖的resource變量不是nil,不會扔你目前看到的例外。

或者,這取決於你試圖要表明,你可以設置自定義的控制器操作自己的實例變量,然後把它作爲資源到你form_for標籤的行爲:

​​

但是,如果你遵循這個方法,你應該考慮爲什麼你需要把它轉換成Devise。設計,默認情況下,通過build_resource函數分配resource變量。如果你打算覆蓋/繞過這個函數,你應該考慮從Devise中抽象出整個功能,因爲你完全繞過了它的默認行爲。

+0

非常感謝,我現在可以加載視圖,但有一個小問題,您能幫忙嗎? – wwli

+0

你的問題是什麼?另外,如果這個答案已經解決了你原來的問題,請接受它是正確的。 – zeantsoi

+0

我更新了他原來的帖子,謝謝 – wwli