레일즈에 익숙하지 않은 것처럼 보였습니다. 모델을 변경할 때마다 콘솔에서 reload!
을해야한다고 들었습니다.Ruby on Rails - 모델을 다시로드해야 할 때 불일치가 있습니까?
이 두 가지 시나리오보다 먼저 reload!
이라고 가정 해 봅시다.
의 내가 같은 특정 구문 오류가있는 모델로, 대본을 가지고 있다고 가정 해 봅시다 :
class Article < ActiveRecord::Base
validator :title, presence: true
end
실행 Article.new(title: "Test 1")
이하는 NoMethodError
을로는 이해할 것이다 발생합니다. 그러나 내가 들어가서 오류를 수정하면 reload!
을 실행하지 않아도 Article.new(title: "Test 1")
이 실행됩니다.
시나리오 B, 반대 방향으로 진행. 예상대로
class Article < ActiveRecord::Base
validates :title, presence: true
end
Article.new(title: "Test 1")
를 실행하면, 오류없이 작동합니다 : I는 다음과 같은 올바른 구문으로 모델을 가지고있다. 하지만 그때 들어가서 validates
을 validator
으로 변경하면됩니다. reload!
을 실행하지 않으면 article.rb
파일에 구문 오류가 있어도 Article.new(title: "Test 1")
을 실행해도 계속 작동합니다. 을 실행하여 명시 적으로 지금은 NoMethodError
이 될 때까지는 아닙니다.
정확히 무엇이 여기에 있습니까? 나는 그것이 매우 구체적이라는 것을 안다. 그러나 이것이 왜 그런지는 알지 못한다. 시나리오 B와 같이 모델을 업데이트하기 위해 reload!
을 실행해야하는 경우가 종종 있는데, 때로는 시나리오 A와 같이 그렇지 않습니다.
아! 고맙습니다! 그래서 그것은 처음에 성공하지 못하면 기본적으로 자동으로 다음 실행시 자동으로 다시로드됩니까? – rb612
@ rb612 예. 개발 모드에서 Rails는 기본적으로 모든 상수를로드하지 않습니다. 어디서나 참조 될 때 필요할 때로드합니다. 그래서'Article'을 만나면이 상수가 메모리에로드되었는지를 검사하고, 그렇지 않으면'$ LOAD_PATH'에있는 파일의 존재를 검사합니다. 발견되면로드하려고 시도하고 상수를 생성합니다 '조항'을 작성해야합니다. 첫 번째 경우에는 후자 부분이 실패했기 때문에'Article' 상수가 생성되지 않았으므로 코드를 수정하고'Article.first'를 다시 실행하면 업데이트 된 코드로 클래스를 올바르게로드합니다. – kiddorails