无法从View页面中的控制器访问变量

时间:2013-10-10 20:11:30

标签: ruby-on-rails ruby-on-rails-3.2

我有一个搜索字段,用户可以在其中输入反馈令牌编号和 将出现相应的搜索反馈表单。

因此在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'

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

1 个答案:

答案 0 :(得分: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