2011-10-26 5 views
0

상위 (기본) 엔티티가 아직 저장되지 않은 경우 종속 모델 엔티티에 파일을 저장할 수 있습니까?Rails에서 저장되지 않은 모델 엔티티에 파일을 추가 하시겠습니까?

스토리를 실제로 저장하기 전에 스토리에 이미지를 추가 할 수 있기를 바랍니다. 그래서 내 모델은 다음과 같이이다 : 스토리 컨트롤러에서

Story (Base Entity) has_many :pictures 
    + Picture (Depedent Entity) belongs_to :story 

, 나는 add_image라는 별도의 조치를해야합니다. 그러나 인스턴스 변수 @story가 여러 요청간에 지속되는 것 같지 않으므로이 작업에서 액세스 할 수 없습니다.

내가 지금까지 생각한 것은 만들 때 세션에 @story 변수를 저장하는 것이므로 거기에서 가져올 수 있습니다. 이게 효과가 있니? 후속 요청에 의도하지 않은 부작용이있을 수 있습니까? 예를 들어 이전 이야기를 세션에 저장하고 잘못된 이야기에 그림을 추가하면 어떻게됩니까?

답변

0

은 분명히 먼저 생성에 주와 함께 따라 기록을 저장할 수 있습니다 :

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

이는 '저장되지 않은 객체와 협회 "를 참조하십시오. 종속 레코드를 추가하려면 collection.build를 사용해야합니다.

이제 내 문제는 mongoid에 의해 생성 된 ID로 세션에 저장하여 가능한 것으로 생각할 수 있지만 여전히 요청간에 상위를 안정적으로 유지하는 방법입니다 (유일한 문제는 ORM간에 이식 가능하지 않다는 것입니다). , 나는 생각한다).

이 질문에 대한 답변입니다. 그래서 나는 아직 어떤 대답도 받아들이지 않을 것이고 일단 적절한 해결책을 발견하면 나는 업데이트를 줄 것이다.

+0

내가 보는 문제는 두 개의 브라우저 창을 열어 동일한 세션에 연결 한 경우 잘못된 항목을 추가하여 업데이트 할 수 있다는 것입니다 (따라서 ID가 부모를 저장하는 아이디어 일 수도 있습니다. , Mongoid 또는 관계형 DB를 사용하지 않는 다른 ORM). 나는 사용자가 세션에서 많은 수의 객체로 끝나기를 원하지 않지만, 영향이 미미하면 어쩌면 그 생각으로 갈 것입니다. – mydoghasworms

1

구현에 대해 생각해보십시오. 데이터베이스에 두 개의 테이블이 있으며 "그림"테이블에 행이 여야합니다. story_id. 이야기가 저장되지 않고 아직 ID가 없다면 무엇이 있어야합니까?

다른 방법으로하십시오. 스토리에 부울 플래그를 추가하십시오 (예 : finished). 모든 "미완성"이야기를 저장하고 응용 프로그램에서 저장시 플래그를 "finished"로 변경하십시오. 오래된 "미완성"(버려진) 이야기와 그 그림을 정기적으로 삭제하는 것을 잊지 마십시오.

+0

감사합니다. @Petr. MongoDB + mongoid를 사용하고 있습니다. 스토리의 인스턴스를 만들 때 다행스럽게도 이미 ID가 있습니다. 그래서 그면에서 문제가되지 않습니다. 미완성 된 이야기로 DB를 채우고 싶지 않으므로 그런 가능성이 없다면 사용자에게 먼저 저장하라고 지시합니다. 나는 콘솔에서 스토리를 만들고, 저장하지 않고도 사진을 추가 할 수 있기 때문에 가능해야한다고 생각합니다. 나는 세션 옵션도 시도 할 것이지만, 나는 의도하지 않은 결과에 대해 조금 걱정하고있다. – mydoghasworms

+0

분명히 가능합니다. http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html "저장되지 않은 개체 및 연결"을 참조하십시오. collection.build를 사용해야합니다. 이제 내 문제는 mongoid에 의해 생성 된 ID를 사용하여 세션에 저장하여 가능할 수 있다고 생각하지만 요청에 대해 부모를 안정적으로 유지하는 방법입니다 (유일한 문제는 DB를 통해 이식 할 수 없다는 것입니다) . – mydoghasworms

관련 문제