2009-04-02 4 views
2

나는 has_manybelongs_to 쌍과 관련된 몇 가지 모델을 가지고 있습니다. 시연을 위해 클라이언트에는 서버가 하나 있지만 서버에는 많은 클라이언트가 있습니다. 다음과 같이 할 수 있습니다.activerecord 연관을 저장하지 않고 강제로 업데이트 할 수 있습니까?

client1.server = the_server 
client2.server = the_server 
client3.server = the_server 

실제 응용 프로그램은 이보다 훨씬 복잡하지만 예제는 실례가 될 것입니다.

개체를 저장하기 전에 이러한 개체 간의 연결을 검사하고 싶습니다. ActiveRecord는 정보가 저장 될 때까지 정보를 업데이트하지 않습니다. 위의 예에서 the_serverclient1, client2 또는 client3 중 하나가 저장 될 때까지 알 수 없습니다. 나는 이것이 active_record의 효율성에 도움이된다고 확신하지만, 메모리에 모델 인스턴스가 일관성없는 상태로 남겨 둡니다.

상태를 업데이트 할 클라이언트 또는 서버에서 호출 할 수있는 것이 있습니까?

+0

3 년 반이고 나에게는 같은 문제가 있지만 내 경우에는 모델이 일치하지 않을 수 있습니다. 추가 할 내용이 있습니까? –

답변

1

개체를 업데이트하려면 #reload으로 전화하십시오.

+1

개체를 먼저 저장해야합니까? 다시로드하면 DB에서 정보를 다시 얻습니다. client1,2,3이 저장되지 않으면 다시로드 할 필요가 없습니다. – srboisvert

+0

그건 내 이해입니다. 나는 DB에서 새로 고침하고 싶지 않습니다. 정반대입니다. 개체를 구원받은 것처럼 새로 고치기를 원합니다. – Sniggerfardimungus

+0

이것은 모델링에 문제가 있음을 나타내는 거대한 반 패턴입니다. 현재 연결이 오래 되었기 때문에 객체가 관련 객체를 다시로드하게하려면'clear_association_cache'를 사용하십시오. 리로드 자체는 때때로 무한 루프를 생성 할 수 있으며 현재 코드 – drhenner

0

당신은 다음과 같이 시작하는 경우 :

client1 = the_server.clients.build(:name => 'a client', ...) 

그럼 당신은 내가 생각하는 당신이 찾고있는 무슨 얻어야한다.

편집 :

아차, 난 당신의 게시물을 다시 읽어와 the_server 중 하나를 아직 저장되지 않았 음을 깨달았다. 아마이 경우 : 중복 비트 그래서 아마도 거기에 더 나은 방법이

the_server.clients.build(:name => 'some client', ..., :server => the_server) 

:

client1.server = the_server 
the_server.clients << client1 

또는 (the_server이 이미 저장되어있는 경우이 CLIENT1을 저장된다는 점에 유의) . 당신은 단지 직후 경우 client1.server를 호출 할 수 있습니다,

the_server.clients << client1 
the_server.clients << client2 
the_server.clients << client3 

참고 그러나 : 당신이 연결을 만드는 역 방법을 사용하는 경우

0

, 당신은 저장되고 그 이전 모델에서 볼 수 있습니다 the_server가 이미 있습니다.

관련 문제