2013-10-10 95 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' 
的意见/反馈/ 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 
相关问题