2016-06-17 3 views
0

다른 언어로 된 코드를 생성 할 수있는 ruby ​​gem을 만들고 있습니다. 보석은 현재 레일 앱에서 모델을로드해야합니다. 그리고 이것은 테이블 이름 인 하나의 매개 변수를 받아들이는 생성자로 구현됩니다. 그 안에는 다음과 같이 테이블의 열 정의를 읽습니다.ruby ​​gem에서 활성 레코드 사용

tableklass = table_name.to_s.constantize # get the class name from table_name 
cols = tableklazz.columns # get columns definitions. 

생성자 'rail g mygen Product'를 실행할 때.

.../루비/보석/2.3.0/보석/activesupport-4.2.4/lib 디렉토리/active_support/인플/methods.rb : 261 :`const_get에서 '항상 아래에 나에게 오류를 준 : 잘못된 상수 이름 제품 (NameError)

어떻게이 오류를 해결할 수 있습니까? 아니면 (코드를 생성하기 위해 테이블 ​​정보를 읽는) 더 좋은 방법이 있는지?

답변

2

constantize expects camelized 입력. 확실하지는 않지만 발전기 내부에서 어떤 일이 일어나고 있는지 알 수 있습니다. constantize은 결국 products을 매개 변수로받습니다. 당신이 뭘 하려는지의 가장 안전한 버전 : 아래

table_name.to_s.singularize.camelize.constantize 

모든 작동합니다 :

:products.to_s.singularize.camelize.constantize 
:product.to_s.singularize.camelize.constantize 
'product'.to_s.singularize.camelize.constantize 
Product.to_s.singularize.camelize.constantize 
+0

의미가 있습니다. 고맙습니다! 이것은 나의 첫 번째 보석, 당신은 큰 보석을 구해주었습니다! :-) – douyw

관련 문제