2013-10-10 3 views
0

사용자가 피드백 토큰 번호를 입력 할 수있는 검색 필드가 있으며 검색된 각 양식이 표시됩니다.보기 페이지에서 컨트롤러의 변수에 액세스 할 수 없습니다.

def find_token 
    @result_feedback = Feedback.find_by_token(params[:token_no]) #61153892 
    redirect_to feedbackresult_path 
    end 

경로에서 : :보기/피드백/searchedfeedback.html.erb에서

match '/feedbackresult' => 'feedbacks#searchedfeedback' 

<%= @result_feedback.name %> 

그것은 다음과 같은 오류 메시지를 던지고 따라서 feedback_controller.rb 파일

:

NoMethodError in Feedbacks#searchedfeedback 
Showing /home/ajay/Documents/ROR/CAP/app/views/feedbacks/searchedfeedback.html.erb where line #1 raised: 
undefined method `name' for nil:NilClass 

답변

0

레일즈는 모든 요청마다 컨트롤러의 새로운 인스턴스를 초기화합니다. 따라서 리디렉션 된 동작은 리디렉션이 호출 된 동작의 인스턴스 변수를 공유 할 수 없습니다. 즉, searchedfeedback 작업에는 @result_feedback 인스턴스에 대한 지식이 없습니다.

def search_feedback 
    if params[:token_no] 
    @result_feedback = Feedback.find_by_token(params[:token_no]) 
    end 
end 

을 그리고보기 search_feedback.html.erb은 다음과 같아야합니다 :

이 시도는 깨끗하게 컨트롤러 액션을 유지하려면

<%= form_tag :search_feedback, method: :get do %> 
    <%= text_field_tag :token_no %> 
    <%= submit_tag 'Search' %> 
<% end %> 

<% if @result_feedback %> 
    <%= @result_feedback.name %> 
<% end %> 

는, 사용하십시오 before_filter/before_action :

before_action :find_token 

    # ... 

private 

    def find_token 
    if params[:token_no] 
     @result_feedback = Feedback.find_by_token(params[:token_no]) 
    end 
    end 
관련 문제