컨트롤러에 예제 액션이 있습니다.RAILS 3 - 컨트롤러의 트랜잭션
def some_action
product = Product.new
product.name = "namepro"
if product.save
client.update_attribute(:product_id,product.id)
end
end
이 코드의 트랜잭션을 추가하는 방법은 무엇입니까? 나는이 예제 코드로 시도 :
def some_action
**transaction do**
product = Product.new
product.name = "namepro"
if product.save
client.update_attribute(:product_create,Time.now)
end
**end**
end
그러나이 오류 발생 :
undefined method `transaction'
내가 컨트롤러에서 트랜잭션을 사용 읽어 나쁜 연습을하지만 이유는 내가 왜 (http://markdaggett.com/blog/2011/12/01/transactions-in-rails/을 모르는)
예제에서 제품이 생성되어 저장되고 클라이언트 업데이트가 실패한 경우 ... Rails가 아무 것도 수행하지 않아야합니다.
감사합니다.
Jim, 당신의 설명으로 정말 도와 줘서 고마워! – user1364684
트랜잭션 논리를 모델에 넣으면 트랜잭션이 하나의 모델로 제한되지 않고 별도의 관심 규칙을 위반하지 않을까요? 일반적으로 거래가 여러 모델에 걸쳐 있고 DB 수준에서 반드시 서로 관련이없는 높은 기회가 있습니다. – xSNRG
그래, 내 의견의 특정 측면에 마음이 바뀌었다. 나는 그것을 컨트롤러 밖으로 유지하는 아이디어를 좋아하지만, 다중 모델 상호 작용은 어딘가에 포장되어야합니다.아마도 다른 클래스 일 수도 있지만 상황에 따라 컨트롤러가 결국 올바른 장소 일 수 있습니다. –