2014-10-03 3 views
0

왜이 기능이 작동하지 않는지 알아 내려고 노력하고 있습니다. 는 기본적으로이 관계는레일이있는 문제 belongs_to

belongs_to :product_category, :foreign_key => :category_id 

을 수행하고이 하나되지

belongs_to :category, :class_name => :product_category, :foreign_key => :category_id 

오류 메시지가 않습니다 "나가서 설명하자면 NameError : 초기화되지 않은 상수 제품 : PRODUCT_CATEGORY"

이 왜입니까? 감사!

답변

2

product_category이라는 클래스가 없기 때문에 후자의 예제가 작동하지 않습니다. 잘못된 클래스 이름을 제공하고 있습니다. Ruby의 클래스 이름은 CamelCase로 작성해야합니다. 레일즈가 product_category 클래스를 찾으면 찾을 수 없습니다.

첫 번째 예제는 Rails가 관계 이름에서 클래스 이름을 추론하기 때문에 작동합니다.

belongs_to :product_category, :foreign_key => :category_id 

product_categoryProductCategory으로 변환합니다. 당신도 똑같은 일을 할 수 있습니다. 터미널을 열고 다음을 입력하십시오.

belongs_to :category, :class_name => 'ProductCategory', :foreign_key => :category_id 

을하지만 레일은 이미 클래스 이름을 추측 할 수 있기 때문에이 경우에는 중복 될 것이다 :

'product_category'.camelize.constantize 

대신 문자열을 전달한다. 관계 이름에서 클래스 이름을 유추 할 수없는 경우 class_name 인수를 사용해야합니다.

+0

네, 정말 고마워요! –