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'

在意见/反馈/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
4

1 回答 1

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
于 2013-10-10T20:21:43.067 回答