2017-01-04 1 views
0

나는 오류를 가지고 그 무기 호에 대한 HomeController 번호 지수 정의되지 않은 메서드 'ID'에서NoMethodError 정의되지 않은 메서드

NoMethodError : NilClass.

@id = params[:id] 
@email = [:email] 
if @id == @user.id && @email == @user.email 
    render :text => "sucsess" 
else 
    render :text => "fail" 

오류 메시지가 너무 @id == @user.id이 방법을 보이는 경우의 @id이며,이 코드는 strange.It가 undefined method 'id'을 말한다이었다 얘기? 내가 해결하기 위해 무엇을해야

(내가 @id이 변수 정의 생각) 그것?

home_controller

class HomeController < ApplicationController 
    def index 
    @id = params[:id] 
    @email = [:email] 
    if @id == @user.id && @email == @user.email 
     render :text => "成功" 
    else 
     render :text => "失敗" 
    end 
    end 

    def create 
    userData = UserData.new(create_params) 
    user = User.find(params[:id]).to_json 

    # エラー処理 
    unless userData.save 
     @error_message = [memo.errors.full_messages].compact 
    end 
    end 
end 

routes.rb

Rails.application.routes.draw do 
    devise_for :users 
    root to: "home#index" 
    get 'home/index' 
    post 'home/index' 

    namespace :home, default: {format: :json} do 
    resources :index, only: :create 
    end 
end 

답변

0

당신은 undefinded 방법 id을 말한다 왜 @user에 대한 값이 없습니다. 이 같은 위해 당신은 값이 있어야합니다 : 코드에

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

또는

@user = User.first 

:

def index 
    @user = User.first # defined User here like code on this line I added 
    @id = params[:id] 
    @email = [:email] 
    if @id == @user.id && @email == @user.email 
    render :text => "成功" 
    else 
    render :text => "失敗" 
    end 
end 

당신은 당신이 그것을 정의 있는지 확인해야합니다. before_filter :your_method_define_user, only: [:index]이있는 경우 값이 :your_method_define_user인지 확인하십시오.

@Deepak Mahakale은 위에 기록했습니다. 너 혼란스러워. 업데이트]

:

귀하의 경로 : 전체 코드를 시도

Rails.application.routes.draw do 
    devise_for :users 
    get 'home/index' # you must decide what to use post or get. But I use get here as default how index method is implemented in rails. 
    root to: "home#index" 
end 

컨트롤러 :

class HomeController < ApplicationController 
    before_filter :find_user, only: [:index] 

    def index 
    @id = params[:id] 
    @email = [:email] 
    if @id == @user.id && @email == @user.email 
     render :text => "成功" 
    else 
     render :text => "失敗" 
    end 
    end 

    def create 
    userData = UserData.new(create_params) 
    user = User.find(params[:id]).to_json 

    # エラー処理 
    unless userData.save 
     @error_message = [memo.errors.full_messages].compact 
    end 
    end 



    private 

    def find_user 
     @user = User.find(params[:id]) # You should specify this code what are your comparing to. 
    end 
end 

당신이 요청을 얻을 사용하는 경우 URL에 매개 변수를 전달해야 추가 예 :

localhost:3000/home?id=<your_id>&email=<email_address> 

및 게시물이 양식에 제공된 입력란에 표시되면 전달하십시오.

+0

행동 index 들으 통해 UR 코멘트를 추가합니다. 당신과 같은 코드를 작성했는데 오류가 발생했습니다. HomeController # index에 ActiveRecord :: RecordNotFound가 있습니다. 'id'= – Rose2017

+0

인 사용자를 찾을 수 없습니다. @ Rose2017, 추가로 왜 같은 방법으로 2 개의 요청을 사용하고 있습니까? home # index'? 당신의 목표는 무엇입니까? – araratan

+0

나는 응용 프로그램 사용자가 로그인 및 로그 아웃 할 수있는 서버를 만들고 싶습니다. 그러나 초보자이므로 왜 mu 코드가 잘못 되었는 지 알지 못합니다. 동일한 방법 홈 # 색인을 가진 2 개의 요청을 사용하는 Im 2 요청? 내 코드는 if-else 메서드 만 있다고 생각했습니다. – Rose2017

1

NoMethodError in HomeController # 인덱스가 정의되지 않은 메소드 'id'for nil : NilClass.

@user는

당신은 설정해야 index 액션에서 nil 인 1

def index 
    @id = params[:id] 
    @email = [:email] 
    @user = User.find(params[:id]) # or current_user whatever your logic is 
    if @id == @user.id && @email == @user.email 
    render :text => "成功" 
    else 
    render :text => "失敗" 
    end 
end 

솔루션 index 액션 또는 before_filter

솔루션의 첫 번째 @user 2

before_filter

before_filter :find_user, only: [:index] 

private 

def find_user 
    @user = User.find(params[:id]) # or current_user implement this according to your logic 
end 
+0

'@user = current_user'를'@user = find_user'로 변경하면 혼동하지 않을 것입니다. – araratan

+0

첫 번째 해결책에서는 private 메소드를 호출하지 않고 현재 로그인 한 사용자에게 제공 할'current_user' 도우미를 작성합니다. –

+0

을'User.find (id) '로 변경했습니다. –

관련 문제