2014-01-28 4 views
-1

내가 고안 가입 위에 나는 this post의 지침에 따라거야정의되지 않은 지역 변수 또는 메소드`signed_in_user '

에 내장 된 서명까지시 사용자 확인 방법을 만들려면이 덮어 내 등록 컨트롤러입니다 :

:

클래스 RegistrationsController < 고안 :: RegistrationsController

skip_before_filter :require_no_authentication, :only => [ :create, :edit, :update, :create_by_user ] 
# before_filter :configure_permitted_parameters, if: :devise_controller? 

def new 
    super 
end 

def create 
    build_resource(sign_up_params) 
    puts "what is resource_name: #{resource_name}" 
    resource.confirmed ||= false 
    resource.confirmation_code ||= create_random_pass 
    if resource.save 
     yield resource if block_given? 
     if resource.active_for_authentication? 
     # set_flash_message :notice, :signed_up if is_flashing_format? 
     sign_up(resource_name, resource) 
     respond_with resource, :location => after_sign_up_path_for(resource) 
     UserMailer.send_simple_message(resource).deliver 
     else 
     # set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_flashing_format? 
     expire_data_after_sign_in! 
     respond_with resource, :location => after_inactive_sign_up_path_for(resource) 
     end 
    else 
     clean_up_passwords resource 
     respond_with resource 
    end 
end 


def edit 
    super 
end 


def update 
    super 
end 


def confirmation 
    @user = User.find(params[:user_id]) 
end 


def confirm 
    ## handles the confirmation 
    puts "The params: #{params[:confirmation_code]}" 
    puts "Hello" 
    user = User.find(params[:user_id]) 
    if user.confirmed == false 
    puts "It's false" 
    redirect_to '/' 
    elsif user.confirmed == true 
    puts "It's true" 
    else 
    puts "It's nil" 
    end 
end 

와 나는 같은 경로를 일치

 devise_scope :user do 
     root to: 'static_pages#home' 
     match '/sessions/user',           to: 'devise/sessions#create', via: :post 
     match '/users/newuser',           to: 'registrations#create_by_user', via:[:post, :get] 
     match '/users/:user_id/confirmation/',       to: 'registrations#confirmation', via: :get 
     match '/users/:user_id/confirm',         to: 'registrations#confirm', via: :post 

끝 난에 양식을 제출할 때

'/ 사용자/: USER_ID/확인'나는 오류 얻을 :

NameError in UsersController#update 
undefined local variable or method `signed_in_user' for #<UsersController:0x00000005696e00> 

내가 분명히 완전히하고있는 고안을 이해하지를 때문에 그는 대신 등록 컨트롤러의 사용자 컨트롤러를 호출 왜하지 않는

편집 :

내 UsersController :

class UsersController < ApplicationController 

    before_action :signed_in_user, only: [:edit, :update] 
    before_action :correct_user, only: [:edit, :update] 
    skip_before_filter :verify_authenticity_token, :if => Proc.new { |c| c.request.format == 'application/json' } 

    def show 
    @user = User.find(params[:id]) 
    end 

    def new 
    @user = User.new 
    3.times { @user.accounts.build } 
    end 

    def create 
    # @user = params[:user] ? User.new(user_params) : User.new_guest 
    @user = User.new(user_params) 
    @account = @user.accounts.new(account_params) 
    if @user.save && @account.save 
     sign_in @user 

     ##flash[:success] = "Welcome to the HighTide!" 
     redirect_to @user 
    else 
     render 'new' 
    end 
    end 

    def edit 
    @user = User.find(params[:id]) 

    end 

    def update 
    @user = User.find(params[:id]) 
    if @user.update_attributes(user_params) 
     #flash[:success] = "Profile updated" 
     sign_in @user 
     redirect_to @user 
    else 
     render 'edit' 
    end 
    end 
    ## I tried also putting in here the logic of the confirmation code 
    def confirmation 
    @user = User.find(params[:user_id]) 
    end 

    def confirm 
    puts "The params: #{params[:confirmation_code]}" 
    puts "Hello" 
    # self.resource = resource_class.to_adapter.get!(send(:"current_#{resource_name}").to_key) 
    #  prev_unconfirmed_email = resource.unconfirmed_email if resource.respond_to?(:unconfirmed_email) 
    user = User.find(params[:user_id]) 
    if user.confirmed == false 
     puts "It's false" 
     redirect_to '/' 
    elsif user.confirmed == true 
     puts "It's true" 
    else 
     puts "It's nil" 
    end 
    end 


    private 

    def correct_user 
     @user = User.find(params[:id]) 
     redirect_to(root_path) unless current_user?(@user) 
    end 

    def admin_user 
     redirect_to(root_path) unless current_user.admin? 
    end 

    def user_params 
     # params.require(:user).permit(:name, :email, :password, 
     #        :password_confirmation, accounts_attributes: [:id, :title]) 
     params.fetch(:user, {}).permit(:name, :email, :password, 
            :password_confirmation, accounts_attributes: [:id, :title]) 
    end 

end 
+1

'사용자 컨트롤러'를 게시하십시오. – vee

+1

등록 파일과 함께 RegistrationsController를 매핑 한 경로 파일도 게시하십시오 – Allerin

+0

업데이트 되었습니까? 2 downvotes를 얻으려면 어떻게해야합니까? – tvieira

답변

0

signed_in_user 대신 authenticate_user를 사용하십시오. 이는 구성 설정에 필요합니다.

사용자 컨트롤러에 이전 작업 호출이 있습니다. 그것은 signed_in_user라는 메소드를 기대합니다. 왜 거기에 그걸 가지고 있니? 이것은 고안과 아무 상관이 없습니다.

+0

으로 갔는지 이해할 수 없습니다. 그 부분에 주석을 달았고 오류가 없지만 리디렉션합니다 UsersController # 업데이트, 양식의 제출 버튼이 등록 # 확인 방법으로 리디렉션되는 경우 ... 확인하지 못했습니다. – tvieira

+1

confirm 메소드의 sign_up (user, user) 때문입니다. 아마도 사용자 컨트롤러에 안심할 수 있습니다. 따라서 사용자 컨트롤러의 업데이트 방법으로 이동합니다. 나는 잘 모르겠다. – SreekanthGS

+0

코드 줄이 없어도 같은 동작을합니다. (어느 쪽이든 이해가 안되었습니다) – tvieira

관련 문제