我有一个搜索字段,用户可以在其中输入反馈令牌编号和 将出现相应的搜索反馈表单。
因此在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
答案 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