2013-10-10 6 views
0

У меня есть поле поиска, в котором пользователь может ввести токен обратной связи и появится соответствующая форма обратной связи.Невозможно получить доступ к переменной из контроллера на страницах просмотра

поэтому в feedback_controller.rb файла:

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

в маршруте:

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

в Views/обратных/searchedfeedback.html.erb

<%= @result_feedback.name %> 

Это бросает следующее сообщение об ошибке :

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

Rails инициализирует новый экземпляр контроллера для каждого запроса. Таким образом, перенаправленное действие не может совместно использовать переменные экземпляра действия, из которого вызывается перенаправление. Другими словами, ваше действие 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 
Смежные вопросы