7

사용자 정의 컨트롤러가 있지만 devise에서 create 액션을 무시하고 싶지 않습니다. 사용자를 등록하려고하면 다음과 같은 오류가 발생합니다.Ruby on Rails : 사용자 정의 Devise 등록 컨트롤러, 작업 만들기 요청

Unknown action 

The action 'create' could not be found for Devise::RegistrationsController 

사용자 정의 등록 컨트롤러가 있기 때문에 요청하고 있습니까? 그렇다면 여기에서 우선 적용하지 않는 모든 작업을 복사해야한다는 의미입니까? https://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rb

또는 내 응용 프로그램에 문제가 있으십니까?

내 경로 : 이것은이 등록 양식입니다

class Devise::RegistrationsController < DeviseController 

    skip_before_filter :require_no_authentication 

    def edit 
    @user = User.find(current_user.id) 
    @profile = Profile.new 
    end 

    def update 
    # required for settings form to submit when password is left blank 
    if params[:user][:password].blank? && params[:user][:password_confirmation].blank? 
     params[:user].delete(:password) 
     params[:user].delete(:password_confirmation) 
    end 

    @user = User.find(current_user.id) 
    if @user.update_attributes(params[:user]) 
     set_flash_message :notice, :updated 
     # Sign in the user bypassing validation in case his password changed 
     sign_in @user, :bypass => true 
     redirect_to after_update_path_for(@user) 
    else 
     render "edit" 
    end 

    end 


    protected 
    def after_update_path_for(resource) 
     user_path(resource) 
    end 

    def after_sign_up_path_for(resource) 
     user_path(resource) 
    end 

end 

내 유증 등록 컨트롤러

devise_for :user, :controllers => { :registrations => "devise/registrations" }, :skip => [:sessions] do 
    get 'signup' => 'devise/registrations#new', :as => :new_user_registration 
    post 'signup' => 'devise/registrations#create', :as => :user_registration 
    end 

입니다 :

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %> 
... 
    <div> 
    <%= button_tag :type => :submit, :class => "btn btn-large btn-inverse" do %> 
    Sign up 
    <% end %> 
    </div> 
... 
<% end %> 

답변

17

등록의 컨트롤러가 잘못된 클래스에서 상속 : DeviseController 등록을위한 기본 클래스이고 h "create"메소드가 아니고 사용자 정의 Devise :: RegistrationsController 클래스도 있습니다 (메소드 만 편집하고 업데이트 함). 오류가 발생합니다. 원래 유증 방법에 대체 사용자를위한 사용자 정의 등록 컨트롤러를 생성하기 위해

, 난 당신이 다음과 같이 제안한다
1. registrations_controller가 생성 컨트롤러 폴더에
2. "사용자"폴더를 만들 수 있습니다.

Users::RegistrationsController < Devise::RegistrationsController 

을하고 행동을 ("편집"과 "업데이트")
3. 변경에 대해 "routes.rb"파일을 통보 오버라이드 (override) : RB 파일, 거기 클래스를 정의

을 10
+0

그게 효과가있다. 폴더 이름으로 고안 할 수없는 이유는 무엇입니까? – hellomello

+0

실제로 그럴 수 있다고 생각합니다.) 하지만 보통은 그런 응용 프로그램을 디버깅하는 고통스러운 경험을 가진 레일 규칙을 따르고 있습니다. 오류는 예기치 않은 곳에서 자주 발생하며 흔히 일부 명명 규칙을 따르지 않는 경향이 있습니다 . –

+2

@RoaringStones 당신은 's'과 등록의 끝을 놓치고 있습니다. 이름은 registrations_controller.rb – Ricbermo