在点击答案时我正在构建的测验中,我希望@taken实例变量从“否”变为“是”
如果在我的节目动作
中为nil,我将其指定为“No”def show
if @taken == nil
@taken = "No"
end
end
然后,如果调用submit_answer操作,我将其更新为“是”。当点击答案时,闪存通知正常工作,所以我知道这个动作正常。但由于某种原因,它不会更新@taken变量。为什么呢?
控制器#动作
def submit_answer
@answer = Answer.find(params[:answer_id])
if @answer.correct_answer == true
flash[:notice] = "You did it!"
@taken = "Yes"
redirect_to :back
else
flash[:notice] = "Sorry wrong answer!"
@taken = "Yes"
redirect_to :back
end
end
view.html.haml
- @question.answers.each do |answer|
.sub-panel.top-padding.green-hover
- if @taken == "No"
%li.padding-left= link_to "#{answer.content}", submit_answer_path(answer_id: answer.id)
- else
%li.padding-left= answer.content
= @taken.inspect
的routes.rb
get 'quizzes/answer/:answer_id', to: 'quizzes#submit_answer', as: :submit_answer
正在发生的事情是在show动作中正确设置@taken为“No”。但是在调用submit_answer操作并显示flash通知后,它不会将@taken实例变量更新为yes。
答案 0 :(得分:2)
请求之间不会记住控制器实例变量。
答案 1 :(得分:2)
在rails控制器中,您不会在另一个操作中获取一个操作的实例变量(@variable
)。为此,您必须创建类变量(@@variable
)。
有关详情,您可以浏览link