2011-10-26 6 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

私が見ている問題は、同じセッションに2つのブラウザウィンドウを開いている場合、間違ったものを追加して更新することができるということです(IDを親に格納するという考え方です。 Mongoidのように、またはリレーショナルDBを使用しない他のORM)。私はセッション中にたくさんのオブジェクトでユーザーを終わらせたくないかもしれませんが、影響が最小であれば多分私はそのアイデアに行きます。 – mydoghasworms

1

実装について考えてみましょう。データベースには2つのテーブルがあり、 "画像"テーブルにはstory_idという行があるはずです。ストーリーが保存されず、まだIDがない場合、そこには何があるべきですか?

別の方法で行います。ストーリーにブール値フラグを追加します(例:finished)。すべての「未完成」のストーリーを保存し、アプリケーションの保存時にフラグを「終了」に変更します。古い「未完成の」(放棄された)物語とその写真を定期的に削除することを忘れないでください。

+0

ありがとう@Petr。私はMongoDB + mongoidを使用しています。私がストーリーのインスタンスを作成するとき、幸いなことにIDは既にあります。その面からは問題ではありません。未完成のストーリーでDBを埋めるのではなく、そのような可能性がなければ、最初に保存するようにユーザーに指示します。コンソールでは、保存せずにストーリーを作成して写真を追加することができるので、それが可能でなければならないと推測しています。セッションオプションも試してみますが、意図しない結果が心配です。 – mydoghasworms

+0

明らかに可能です:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html "未保存のオブジェクトと関連付け"を参照してください。 collection.buildを使用する必要があります。今私の問題は、mongoidによって生成されたIDを使ってセッションに格納することで可能になると思っていますが、確実に要求を越えて親を永続的に保持する方法です(唯一の問題はDB間で移植できないということです) 。 – mydoghasworms

関連する問題