Rails 4,自定义动作中的实例变量没有更新,为什么?

时间:2014-12-15 07:10:07

标签: ruby-on-rails controller instance-variables

在点击答案时我正在构建的测验中,我希望@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。

2 个答案:

答案 0 :(得分:2)

请求之间不会记住控制器实例变量。

答案 1 :(得分:2)

在rails控制器中,您不会在另一个操作中获取一个操作的实例变量(@variable)。为此,您必须创建类变量(@@variable)。

有关详情,您可以浏览link