在Rails中将文件添加到未保存的模型实体?

时间:2011-10-26 11:29:34

标签: ruby-on-rails ruby-on-rails-3

当父(基础)实体尚未保存时,是否可以在依赖模型实体中保存文件?

我希望用户能够在故事实际保存之前将图像添加到故事中。所以我的模型是这样的:

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

在Story控制器中,我有一个名为add_image的单独操作。但是,因为实例变量@story似乎不会在请求之间保持不变,所以我无法在此操作中访问它。

到目前为止,我所想到的是将@story变量存储在create中的会话中,因此我可以从那里检索它。这会有用吗?可能会对后续请求产生任何意外的副作用吗? (例如,如果我将之前的故事存储在会话中并将图片添加到错误的故事中,该怎么办?)。

2 个答案:

答案 0 :(得分:1)

想想实施。数据库中有两个表,“pictures”表中应该有一行story_id。应该有什么,如果故事没有保存而且还没有id?

以另一种方式做。向Stories添加一些布尔标志,例如finished。保存所有“未完成”的故事,并将标记更改为“已完成”保存在您的应用程序中。不要忘记定期删除旧的“未完成”(废弃)故事及其图片。

答案 1 :(得分:0)

显然可以在第一次创建时将依赖记录与main一起保存:

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

请参阅“未保存的对象和关联”部分。您必须使用collection.build添加相关记录。

现在我的问题仍然是如何在请求中可靠地保持父级,尽管我认为这可以通过将其存储在具有mongoid生成的ID的会话中来实现(唯一的问题是它不能跨ORM移植,我想)。

这回答了我的部分问题。所以我现在还不接受任何答案,一旦我找到了合适的解决方案,我会给出更新。