搜索结果未在rails中的视图页面中呈现

时间:2013-10-15 06:40:58

标签: ruby-on-rails ruby-on-rails-3

观点/反馈/ searchfeedback.html.erb:

我的搜索表单:

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

app / 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

views / feedbacks / searchingfeedback.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

2 个答案:

答案 0 :(得分: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发送带有301标头的Location响应。

在您的控制器操作调用redirect_to之后,当前请求结束,并且所有实例变量都不可用于浏览器根据301 Redirect的HTTP规范执行的请求。这是HTTP请求周期的一部分。

你可能只想做:

render :feedbackresult

这将简单地呈现feedbackresult操作的模板。

答案 1 :(得分:0)

如果@result_feedback不是nil,请尝试仅返回 - 您可以这样做:

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