2013-01-10 1 views
0

여기 내가하려고 무엇을 디버그하는 데 도움 없습니다 :레일 콘솔을 통해 객체 (또는 내 응용 프로그램을 통해)를 업데이트 할 수 없습니다 ...하지만 특정 오류가

irb(main):008:0> c.title = "Another Test" 
=> "Another Test" 
irb(main):009:0> c.save 
    (0.7ms) BEGIN 
    FriendlyId::Slug Load (1.0ms) SELECT "friendly_id_slugs".* FROM "friendly_id_slugs" WHERE "friendly_id_slugs"."sluggable_type" = 'Contest' AND (slug = 'another-test-challenge' OR slug LIKE 'another-test-challenge--%') AND (sluggable_id <> 64) ORDER BY LENGTH(slug) DESC, slug DESC LIMIT 1 
    (0.5ms) ROLLBACK 
=> false 

를 내 응용 프로그램에서이 작업을 수행 할 때 (즉, 나뿐만 아니라 내 객체에 관련된 친화적 인 ID에 해당 내 객체의 제목을 편집 할 수없는 것

2013-01-10T17:53:47+00:00 app[web.2]: cache: [POST /mycontroller/this-is-the-old-title] invalidate, pass 

: 편집 양식)를 사용하여, 나는이 문제를 얻는다.

+0

레일스 콘솔에서이 명령을 실행 한 후에'c.errors.full_messages'는 무엇을 출력합니까? –

+0

또는 대신'c.save! '명령을 실행 해보십시오. –

+0

레오 - 그것을 지적 해 주셔서 감사합니다, 그것은 무슨 일이 있었는지 알아낼 수있었습니다! 응답으로 답장을하면 계속해서 받아 들일 것입니다. –

답변

1

대답에 대한 답변 c.save은 해당 개체에 대한 유효성 검사를 호출합니다. 유효성 검사에 실패하면 SQL 트랜잭션이 롤백됩니다.

트랜잭션을 사용하면 오류를 확인하기 위해 객체 c.errors.full_messages를 요청할 수 ROLLBACK 묻 으면하는 검증 실패 또는 대신 검증이 실패 할 경우 예외를 발생합니다 c.save 사용 c.save!를 사용.