2014-06-20 10 views
3

나는 쇼 페이지에서 보육 세부 정보를 표시하고자하지만 보육 컨트롤러 파일에서이 오류NoMethodError : 정의되지 않은 메서드`전무에 대한 '발견 : NilClass

NoMethodError : undefined method `find' for nil:NilClass 

있고 난 어떤 생각을하고 있지 않다. 나는 아래에 그 오류 라인을 언급했다.

이 파일 내 컨트롤러입니다

class DayCaresController < ApplicationController 
    before_filter :authenticate_user! 
    before_action :set_day_care, only: [:show, :edit, :update, :destroy] 

# GET /day_cares 
# GET /day_cares.json 
def index 
    @day_cares = DayCare.all 
end 

# GET /day_cares/1 
# GET /day_cares/1.json 
def show 
end 

# GET /day_cares/new 
def new 
    @day_care = DayCare.new 
end 

# GET /day_cares/1/edit 
def edit 
end 

# POST /day_cares 
# POST /day_cares.json 
def create 
    @day_care = current_user.build_day_care(day_care_params) 

    respond_to do |format| 
    if @day_care.save 
     UserMailer.welcome_email(@user).deliver 
     format.html { redirect_to @day_care, :gflash => { :success => 'Day care was successfully created.'} } 
     format.json { render :show, status: :created, location: @day_care } 
    else 
     format.html { render :new } 
     format.json { render json: @day_care.errors, status: :unprocessable_entity } 
    end 
    end 
end 

# PATCH/PUT /day_cares/1 
# PATCH/PUT /day_cares/1.json 
def update 
    respond_to do |format| 
    if @day_care.update(day_care_params) 
     format.html { redirect_to @day_care, :gflash => { :success => 'Day care was successfully updated.'} } 
     format.json { render :show, status: :ok, location: @day_care } 
    else 
     format.html { render :edit } 
     format.json { render json: @day_care.errors, status: :unprocessable_entity } 
    end 
    end 
end 

# DELETE /day_cares/1 
# DELETE /day_cares/1.json 
def destroy 
    @day_care.destroy 
    respond_to do |format| 
    format.html { redirect_to day_cares_url, :gflash => { :success => 'Day care was successfully destroyed.'} } 
    format.json { head :no_content } 
    end 
end 

private 
    # Use callbacks to share common setup or constraints between actions 

    def set_day_care 
    @day_care = current_user.day_care.find(params[:id]) # => **I got error this line** 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def day_care_params 
    params.require(:day_care).permit(:name, :address, :office_phone, :cell_phone, :logo, :website, :user_id) 
    end 

    def dashboard 
    end 

    def profile 
    end 

end 

답변

3

사용자 has_many: day_cares 다음 대신 day_care의 이름을 사용하는 경우 :

@day_care = current_user.day_cares.where(id: params[:id]).take 

또는 당신이 쓴 아마 같이

@day_care = current_user.day_cares.find(params[:id]) 

그러나 배열로 단일 인스턴스 대신 (day_cares).

또한 당신은 사용할 수 있습니다

@day_care = DayCare.find(params[:id]) 

당신이 ID로 검색합니다. 또는 당신은 사용자에게 day_care있어 확인해야하는 경우 :

@day_care = DayCare.where(id: params[:id], user: current_user).take 
0

current_user.day_care.find 사용할 수 없습니다, 당신은 단지 복수의 협회에 쿼리를 수행 할 수 있기 때문이다. 그래서 모델 협회가 설치되어 주어진 제대로 같이

class User < ActiveRecord:Base 

    has_many :day_cares 
    ... 
end 

솔루션은

`current_user.day_cares.find` #right! 

`current_user.day_care.find` #wrong! 

에서 맞춤법 오류를 해결하려면 아마

관련 문제