2011-07-05 3 views
2

필드 이름이 'process_salary'인 'user'테이블이 있습니다. 그것이 나에게주는'?'이있는 fieldname에 문제가 있습니다.

@user = User.create(params[:user]) 
if @user.process_salary? 
//some code here 
else 
//some code here 
end 

내가 사용자의 새로운 객체를 생성하고 process_salary를 확인 부울 데이터 형식

NoMethodError: undefined method `process_salary?' for #<User:0xb6ac2f68> 

왜이 오류가 발생 오류 다음시킨? 열 이름을 변경하지 않고도이를 피할 수 있습니까? 내가 디버거를 검사 할 때

은 처음 충돌하지만, 그 후 제대로

답변

5

물음표가 액티브에서 특별한 의미를 가지고 실행됩니다. 필드가 true인지 여부를 확인하는 데 사용할 수 있습니다. 좋은 생각이 아닌 필드 이름의 일부로 사용하고 있습니다. 만약 당신이 @ user.process_salary 시도 할 수 ?? 존재하지만 궁극적으로 'process_salary'라는 데이터베이스 열을 변경하는 것이 가장 쉽다고 생각합니다.

사이드 노트 : '레일 콘솔'은 모델을 가지고 노는 데 정말로 도움이됩니다.

+1

Ruby는 '@ user.process_salary ??'가 까다로워지지 않고 허용하지 않습니다 (예 :'@ user.send (: "process_salary ??")') –

1

cellcortex가 게시 한 것처럼 열 이름 끝에있는 물음표는 Rails에서 까다 롭습니다.

@user['process_salary?'] 

또는 더 자세한 :

@user.read_attribute['process_salary?'] 

당신은 물론 시험의 수를 .nil를 사용하여 무기 호에 대한 레거시 이유가 그것을 가지고해야하는 경우 다음과 같이 속성 수 액세스 할 수 있습니다 ?.