2016-06-09 5 views
2

현재 사용자가보기 양식에 숫자를 입력 할 때마다 1 씩 증가시키는 컨트롤러 메소드가 있습니다. 코드와 오류를 보여 드리겠습니다. 여기에 충분한 배경을 제공하고 싶습니다. 그래서,이 모델은 subscriber을 생성하는 다른 폼을 가지고 있지만이 모델은 이름과 전화 번호를 취하지 만 int 데이터 유형 인 방문 속성도 가지고 있습니다. 그래서 저에게 문제를주고있는 제어기 방법은, 그것의 기능은 구독자에 대한 방문을 그 구독자에 붙어있는 번호를 찾아서 증가시키는 것입니다. 그러나 사용자가 자신의 전화 번호를 입력 할 때이 오류는 nil에 대해 정의되지 않은 메서드 인 '+'를 던집니다. NilClass와 나는 그것을 해결하는 방법에 정말로 혼란스러워했습니다. 여기 명확성을위한 제 코드가 있습니다.정의되지 않은 메소드 '+'for nil : NilClass - Ruby

CONTROLLER :

def visit 
    @subscriber = Subscriber.find_by_phone_number(params[:phone_number]) 
    if @subscriber 
    @subscriber.visit += 1 
    @subscriber.save 
    flash[:notice] = flash[:notice] = "Thank You #{@subscriber.first_name}. You have #{@subscriber.days_till_expired} until renewal" 
    redirect_to subscribers_search_path(:subscriber) 
    else 
    render "search" 
    end 
end 

ERROR : 제가 적용하는 다른 어떤 코드를 잘 모르겠어요

enter image description here

? 더 많은 정보가 필요하면 알려주세요. 고맙습니다.

+0

'@ subscriber'의 값, 특히'@ subscriber.value'를 확인하십시오. 가능성이 높습니다. 그런 다음'@ subscriber'를 생성하는 코드를 보여주고,'@ subscriber.value'가 초기화되는 방법에 대한 가정을 점검하십시오 (아마도 그렇지 않습니다). – Amadan

답변

5

@subscriber.visit이 없기 때문에 먼저 0으로 설정해야합니다.

가입자가 생성 될 때마다 마이 그 레이션에서 기본값을 0으로 설정할 수 있습니다. 그러면 걱정할 필요가 없습니다.

t.integer :visit, default: 0

아니면이 (전무 경우 0으로 설정하는) @subscriber.visit += 1 전에 라인 @subscriber.visit ||= 0을 추가합니다.

관련 문제