2012-06-30 2 views
1

에 대한 나는 (VARCHAR (255)) 문자열 필드에 5킬로바이트 텍스트를 입력하고이 오류를받은 :레일 : 데이터가 너무 오래 열

Mysql2::Error: Data too long for column 'title' at row 1: INSERT INTO `posts`.... 

이 문제를 해결하는 가장 좋은 방법은 무엇입니까?
모델에서 before_save에서이 텍스트를 255로 잘라야합니까?
컨트롤러의 [: that_field] 매개 변수를 수정 하시겠습니까?
다른 해결책이 있습니까?

답변

11

해결 방법은 달성하려는 목표에 따라 다릅니다. 그것은 모두 사용자 경험에 관한 것입니다.

사용자가이 필드에 255 자보다 긴 데이터를 입력하게하려면 필드를 :string에서 :text으로 변경하십시오.

데이터가 255보다 길지 않게하려면 두 가지 옵션이 있습니다. 사용자에게 유효성 확인 메시지를 제공하려면 Post 모델에 validation을 추가하십시오. 당신이 메시지에 대해 신경 쓰지 않는 경우

class Model < ... 
    validates_length_of :title, :maximum => 255 
end 

세 번째 옵션은 데이터베이스에 기록하기 전에 값을 트림 (예 A :before_save에 대한) 콜백을 사용합니다. 설정 한 직후에 잘리는 문자열을 선호하는 경우 속성의 기본 설정자를 재정의 할 수도 있습니다.

+0

2 차 솔루션을 사용하려면 'until @ object.save'' render'new''로 오류가있는 양식을 사용자에게 다시 표시해야합니다. – DmitryR

+1

네, 맞습니다. –

+0

체계적인 대답; 희귀 동물. 고맙습니다. – yeyo

관련 문제