2013-10-15 2 views
1

просмотров/обратные связи/searchfeedback.html.erb:Искал результат не отображается на странице просмотра в рельсах

Мой Форма поиска:

<%= form_tag(search_feedback_feedback_path(:id), :method => :get) do %> 
    <%= text_field_tag :token_no %> 
    <%= submit_tag 'Search' %> 
<% end %> 

приложение/Config/routes.rb файл:

resources :feedbacks do 
    member do 
    get :search_feedback 
    end 
end 

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

в feedbacks_controller.rb файле:

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

просмотров/отзывы/searchedfeedback.html.erb:

Your Result found : <%= @result_feedback.name %> 

Здесь я получаю следующую ошибку:

NoMethodError in Feedbacks#searchedfeedback 

Showing C:/Users/PROJ/app/views/feedbacks/searchedfeedback.html.erb where line #1 raised: 
undefined method `name' for nil:NilClass 
+0

'find_by_token', вероятно, ничего не находит. – benastan

+0

find_by_token работает абсолютно нормально (поскольку токен - это имя одного столбца в таблице обратных связей), даже я проверял его с помощью logger.info (@ result_feedback.name). вопрос только с рендерингом. – Ajay

+0

Тогда почему вы получаете ошибку 'undefined method 'name' для nil: NilClass'? Возможно, есть еще одна переменная, к которой вы отправляете сообщение: имя? – benastan

ответ

3

После установки переменного экземпляра @result_feedback, перенаправление с использованием redirect_to "

def search_feedback 
    if params[:token_no] 
    @result_feedback = Feedback.find_by_token(params[:token_no]) 
    redirect_to feedbackresult_path # <-- the current request is over! 
    end 
end 

redirect_to посылает в ответ 301Location с заголовком.

После того, как действие вашего контроллера вызывает redirect_to, текущий запрос завершается, и все ваши переменные экземпляра недоступны для запроса, который браузер выполняет в соответствии со спецификацией HTTP для 301 Redirect. Это часть цикла запроса HTTP.

Вы, вероятно, хотите просто сделать:

render :feedbackresult 

Какой будет просто вынести шаблон для feedbackresult действия.

+0

Бинго, который сделал мою работу !!! Но моя страница результатов - «searchfeedback». Следовательно, я должен использовать render: searchfeedback – Ajay

+0

Прохладный! Рад помочь! – benastan

+0

Но в функции поиска всегда желательно отображать результат поиска на той же самой странице, а не создавать новую страницу. : D – Ajay

0

Постарайся только вернуть его, если @result_feedback не nil - вы можете сделать это это:

Your Result found : <%= @result_feedback.name if @result_feedback %> 
+0

Ну, при попытке выше кода ничего не было напечатано на моей странице просмотра, что указывает, что @result_feedback равно null. Но перед переходом redirect_to feedbackresult_path я использовал logger.info (@ result_feedback.name), который печатает извлеченное имя в файле development.log. Я не уверен, где это неправильно! – Ajay

+0

думаю, что это должен быть комментарий к другому ответу :) он прав, кстати! – dax

+0

Да, правильно, я хотел добавить комментарий к этому ответу по ошибке. В другом случае найденная ошибка/может быть функцией stackoverflow, которую я не могу удалить из комментариев! : p – Ajay

Смежные вопросы