7

Tôi có một bộ điều khiển đăng ký tùy chỉnh, nhưng tôi không muốn ghi đè hành động tạo ra. Khi tôi cố gắng đăng ký người dùng, tôi nhận được lỗi này:Ruby on Rails: Bộ điều khiển đăng ký Devise tùy chỉnh, yêu cầu tạo hành động

Unknown action 

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

Có yêu cầu bởi vì tôi có bộ điều khiển đăng ký tùy chỉnh không? Nếu vậy, điều đó có nghĩa là tôi cần phải sao chép tất cả các hành động mà tôi không ghi đè từ đây: https://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rb

Hoặc vì có sự cố với đơn đăng ký của tôi?

tuyến đường của tôi:

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 

Đây là của tôi điều khiển đăng ký devise

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 

Đây là hình thức đăng ký:

<%= 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 %> 

Trả lời

17

điều khiển của bạn đăng ký kế thừa từ lớp sai: DeviseController Đây là lớp cơ sở để đăng ký và h như không có "tạo ra" phương pháp, và như vậy không tùy chỉnh của bạn Devise :: RegistrationsController lớp (nó chỉ có các phương pháp chỉnh sửa và cập nhật) - nó phát sinh lỗi.

Để tạo điều khiển đăng ký tùy chỉnh của riêng bạn cho người dùng với dự phòng các phương pháp devise gốc, tôi đề nghị bạn làm như sau:
1. tạo ra "người sử dụng" thư mục trong thư mục controllers
2. tạo có registrations_controller. tập tin rb, và xác định lớp có:

Users::RegistrationsController < Devise::RegistrationsController 

và ghi đè lên bất cứ hành động ("chỉnh sửa" và "cập nhật")
3. thông báo cho "routes.rb" tập tin về những thay đổi:

devise_for :users, :controllers => { registrations: 'users/registrations' } 
+0

Điều đó có hiệu quả. Tại sao nó không thể được đưa ra như một tên thư mục? – hellomello

+0

thực sự, tôi nghĩ rằng nó có thể là) nhưng tôi thường tuân thủ quy ước đặt tên đường ray để có được trải nghiệm đau đớn khi gỡ lỗi các ứng dụng như vậy: lỗi có xu hướng ở những nơi rất bất ngờ và thường là lý do duy nhất . –

+2

@RoaringStones bạn đang thiếu 's' và kết thúc đăng ký. Tên phải được đăng ký_controller.rb – Ricbermo

Các vấn đề liên quan