2011-12-29 3 views
2

방금 ​​Datamapper를 사용하기 시작했습니다.더티 리소스 란 무엇입니까?

나는 update에 노력하고 있습니다.

오류가 발생합니다
u1 = User.get(1) 
u1.name = "xyz" 
u1.update 

가/예외가 발생 : 나는 그것의 ID를 사용하여 객체/모델을 얻을. 다시 시도 :

u1 = User.get(1) 

와 그 이후 :

u1.update({:name => "xyz"}) 

거짓 발생합니다 및 dirty? 반환 true.

그 후 update을 호출하면 그것이 더럽다고 말하는 데 실패합니다.

나는에 의해 저장 할 수 있습니다

다음
u1.name = "xyz" 
u1.save 

내 질문은 :

내가 사용한다 무엇
  • : 저장하거나 업데이트?
  • get(id) 한 필드 만 변경하면됩니까?
  • update은 언제 사용해야합니까? 구문은 무엇입니까 : user.update({ ....}) 또는 user.name = "xyz"; user.update?
  • dirty?은 무엇입니까? 그리고 내가 더러운 객체를 만들면 어떻게해야합니까? 변수를 데이터베이스에서 새로 가져 오는 것이 좋습니다?
+3

오, "무엇이 더러운 자원입니까?"잘못 될 수 있습니다. –

답변

5

db에서 자원을 가져온 후 해당 특성을 변경하면 자원이 '더티'가됩니다. 즉, 리소스가 메모리에로드되고 상태가 변경되고 변경 사항이 db에 유지 될 수 있습니다.

당신은로드 된 자원에 대한 변경을 지속 #save를 사용하여 즉시 '더러운'에 자원의 상태를 변경하지 않고 변경을 지속 할 때 #update를 사용합니다. 다음은 세션 예입니다.

User.create(:name => 'Ted') 

# update user via #save 
user = User.get(1) 
user.name = 'John' 
user.dirty? # => true 
user.save 

# update user via #update 
user = User.get(1) 
user.update(:name => 'John') 
user.dirty? # => false