2017-02-16 3 views
1

responding 속성을 가진 @recipient 개체가 있습니다. 예, responding=f.check_box :responding, {}, 'Yes', 'No'을 통해 "예"또는 "아니요"를 저장하고 싶습니다. docs이 표시 될 수 있습니다.레일즈 check_box form helper로 'true'또는 'false'대신 'Yes'또는 'No'를 어떻게 저장합니까?

양식은 Yes 또는 No를 제출하고 PostgreSQL의 UPDATE 문이 Yes 또는 예상대로 No 사용 (나는 것을 $ rails server 터미널 창에서 참조). 하지만 responding 속성의 데이터 유형 (부울 또는 문자열)에 관계없이 결국 db에 저장되는 것은 true 또는 false입니다. 나는 당혹 스럽다. 배후에서 무슨 일이 일어나고있는거야? Rails에 Yes 또는 No을 저장하도록하려면 어떻게해야합니까? 나는 (안)해야합니까? 내가 뭔가를 오해하고 있니? fine manual에서

+0

d/b 스키마의 '응답'필드는 어떤 데이터 유형입니까? – margo

+0

'responding' 속성은 db의 문자열 필드입니다. – Arta

+0

문자열이 맞습니까? 테이블의 스키마는 어떤 모습입니까? –

답변

3

:

8.6. 부울 유형
[...]를 "true"로 상태에 대한
유효한 문자 값은 다음과 같습니다, 다음과 같은 값을 사용할 수있는 "거짓"상태에 대한

TRUE 
't' 
'true' 
'y' 
'yes' 
'on' 
'1' 

:

FALSE 
'f' 
'false' 
'n' 
'no' 
'off' 
'0' 

따라서 'yes''no' 문자열은 각각 truefalse의 유효한 별칭입니다.

부울 열을 'yes'으로 설정하면 레일스 값에 액세스 할 때 true이 다시 나타납니다. 'yes'은 SQL에서 TRUE의 별명이고 Rails는 Ruby의 trueTRUE SQL 부울 값을 나타냅니다. 마찬가지로 'no'false에 대해서도 마찬가지입니다.

당신은 데이터베이스 내의 당신의 논리 값의 특정 표현에 대한 걱정보다는 모델을 표시 할 때 'Yes''No'truefalse 루비 값을 번역하는 것이 더 낫다.


서버 재시작에 대한 혼란과 실제로 열 유형이 혼동되기 때문에 이것이 실제로 적용되는지는 확실하지 않습니다. OP는 다른 읽기를 원했기 때문에 이것을 삭제 취소했습니다.

1

그래서, 당신은

=f.check_box :responding, {}, 'Yes', 'No' 

정상적인 form_for @recipient와 함께 사용하는 경우 그것은 당신에게 가치를 가지고 하나의 확인란을 제시한다 예. check_box가 선택되면 저장된 값은 '예'입니다. 사용 : 열의 문자열. 체크되지 않은 값이 'no'이면. 정상적인 절차입니다. 글쎄, 내가 볼 수있는 것은 당신이 check_box 대신에 checkbox를 사용한다는 것이다.

데이터 유형 : 문자열이어야합니다. 당신은 정말로 : string과 boolean이 아닌 것을 사용하고 있습니까? boolean을 사용하면 true를 저장합니다. 변경 후 올바르게 이전 했습니까? schema.rb ...을 확인 했습니까? 그러나 나는 단지 도우려고 노력하고 있지만 이것이 당신에게 효과가 없다면 나는 그 문제가 무엇인지 모릅니다. 희망이 도움이됩니다. 행운을 빕니다!

+0

제대로 마이그레이션되었습니다. 부울을 위해 어떻게 행동하는지보기 위해 앞뒤로 몇 번. 'checkbox'는 여기 오타입니다. 나는 그것을 바로 잡을 것입니다. 서버를 다시 시작한 후에 문제가 해결되었습니다 (놀랍게도 일반적으로 마이그레이션 후 서버를 다시 시작하지 않습니다). 그것은 예상대로 작동합니다. 고맙습니다. – Arta

+1

마이그레이션을 실행 한 후에는 항상 서버를 다시 시작해야합니다. – margo