나는 current_user
도우미와 함께 Devise를 사용하는이 응용 프로그램을 가지고 있습니다. 모듈을 만들 때 current_user
은 nil
이됩니다.Rails ActiveSupport :: 문제 및 방법 평가
class PagesController < ApplicationController
include ModuleTest
def index
a_test_method
end
end
그리고 ModuleTest :
module ModuleTest
extend ActiveSupport::Concern
def a_test_method
puts "(BEFORE)===========> #{current_user.inspect}"
current_user = nil if false
puts "(AFTER) ===========> #{current_user.inspect}"
end
end
출력 : 내가 삭제하면
(BEFORE)===========> #<User id: 1>
(AFTER) ===========> nil
그러나가 /이 라인 # current_user = nil if false
을 주석 current_user
이 유효 :
(BEFORE)===========> #<User id: 1>
(AFTER) ===========> #<User id: 1>
다소 지연 평가와 관련이 있습니까?
편집
전체 문제는 문이 평가되지 않을 때 루비가 변수를 정의하는 방법에 의존 :
아래에이 작업을 수행하는 방법2.3.4 (main):0 > defined? this_never_seen_variable_before
=> nil
2.3.4 (main):0 > this_never_seen_variable_before = "value" if false
=> nil
2.3.4 (main):0 > defined? this_never_seen_variable_before
=> "local-variable"
2.3.4 (main):0 >
2.3.4 (main):0 > this_never_seen_variable_before_2
NameError: undefined local variable or method `this_never_seen_variable_before_2' for main:Object
from (pry):119:in `<main>'
2.3.4 (main):0 > this_never_seen_variable_before_2 = "value" if false
=> nil
2.3.4 (main):0 > this_never_seen_variable_before_2
=> nil
2.3.4 (main):0 >
?