2013-06-18 3 views
3

DB에 행을 만들 수 없습니다. Rails는 명백하게 시작한 다음 아무런 오류없이 즉시 트랜잭션을 롤백합니다. 나는 sqlite3을 사용하고있다.오류없이 자동 롤백 하시겠습니까?

logger.debug("creating billing name...") 
    BillingName.create() #also tried BillingName.new.save 
    logger.debug("...created") 

로그 파일 :

creating billing name... 
^[[1m^[[36m (0.1ms)^[[0m ^[[1mbegin transaction^[[0m 
^[[1m^[[35m (0.1ms)^[[0m rollback transaction 
...created 

select * from billing_name 보여줍니다 실제로 어떤 항목이 추가되지 않았습니다. 거래가 거부되는 이유를 어떻게 알 수 있습니까?

+1

아마도 BillingName이 유효성 검사에 실패 했습니까? create 문을'BillingName.create! '로 변경하고 Rails가 로그에 던진 예외를 확인하십시오. – ipd

+2

"거래가 거부되는 이유를 어떻게 알 수 있습니까?" 'BillingName.new (name : 'blabla')'등을 검사하고'.valid? '로 테스트한다 (DB에 항목이 저장되어 있는지 테스트하기 위해'.persisted?'를 참조) – MrYoshiji

+0

'billing_name = BillingName.new; billing_name.save; console.log (billing_name.errors.inspect.to_s)'를 실행하여 오류가 무엇인지 확인하십시오. – spullen

답변

7

은 당신이 당신이 모델을 검사하여 오류를 찾을 수 있도록 좋은 답변됩니다 save 또는 valid?

billing_name = BillingName.new 
billing_name.save # or billing_name.valid? 
puts billing_name.errors.inspect 
+1

또한,'billing_name.errors.full_messages'는 오류 배열을 더 멋진 형식으로 줄 것입니다. – spullen

3

후 오류를 확인할 수 있습니다. 나는 그것들을 사용한다.

하지만 ActiveRecord가 특히 콜백에서 유용한 정보를 제공하지 않는다는 사실을 발견했습니다. valid?이 true이면 오류는 비어 있고 콘솔은 롤백을 제외한 모든 것을 표시하지 않습니다. 따라서, 콜백에서 일어나는 일, 특히 before_create 필터를 살펴 보는 것이 좋습니다.

+0

생명의 은인 ... 나는 어떻게 그런 바보가되어 그 것을 놓칠 수 있습니까? 감사 –

관련 문제