2012-09-16 45 views
0

我一直在拉我的頭髮,試圖讓任何與在設計的users_controller.rb中的「def創建」和「def更新」工作。Devise:users_controller.rb中的「def create」不工作?

舉例來說,我已經試過這樣:

def create 

    @user = User.new(params[:user]) 

    respond_to do |format| 
    if @user.save 
     flash[:notice] = "Test Save" 
    else 
     flash[:notice] = "Test Error" 
    end 
    end 

    end 

我用這個代碼用適當的代碼一起顯示在意見段閃光的通知。但是,如果我提交空白表格,不完整表格或完整表格,則不會顯示任何內容。用戶註冊仍然會通過一個完整的表單,但它不符合我在「def create」中的任何內容。我嘗試了其他方法來測試閃存通知,例如發送到不同的頁面等,我沒有迴應。 「def更新」也是一樣,它似乎甚至不使用該代碼。

我對這個完全傻眼了,有什麼想法嗎?

回答

1

如果我正確理解你的問題,你應該覆蓋色器件控制器。

# app/controllers/registrations_controller.rb 
class RegistrationsController < Devise::RegistrationsController 
    def new 
    super 
    end 

    def create 
    # add custom create logic here 
    end 

    def update 
    super 
    end 
end 

你可以看到默認的設計控制器在這裏做的: https://github.com/plataformatec/devise/tree/master/app/controllers/devise

如果你只是想編輯的閃信,看着上面顯示的是設計的鏈接使用了一個名爲方法set_flash_message

# Sets the flash message with :key, using I18n. By default you are able 
    # to setup your messages using specific resource scope, and if no one is 
    # found we look to default scope. 
    # Example (i18n locale file): 
    # 
    # en: 
    #  devise: 
    #  registrations: 
    #   signed_up: 'Welcome! You have signed up successfully.' 

所以你可以用正確的文本編輯你的devise.en.yml文件,瞧!

注意:如果你覆蓋控制器不要忘了還加

# app/config/routes.rb 
devise_for :users, :controllers => {:registrations => "registrations"} 
0

這是怎麼回事?

if @user.save 
    redirect_to @user, notice: 'User was successfully created.' 
else 
    render action: 'new' 
end 

您正在設置flash,但沒有重定向,也沒有渲染。我想知道你是否得到一個空白頁面,或者是一個200沒有身體。

這將重定向到show動作,如果成功設置flash通知,並呈現new形式與@user.errors顯示失​​敗的原因。

如果您正在使用設計,您可以使用註冊控制器創建一個新的帳戶,您不需要創建一個新的帳戶。如果你創建一個新的,有可能是在路線與registrations#create和都指向一個users#create衝突POST /users

相關問題