2011-06-24 105 views
0

我有两个模型:ReportSinglePage。 用户可以上传PDF报告。此报告的每一页都会变成图像并保存到它自己的single_page-instance中。在模型中创建模型

目前,我正在保存报告(在我的控制器中),如果保存成功,我为此报告创建single_pages(也来自控制器内)。

我不喜欢这种方法,因为这种逻辑应该在模型本身内处理。另一个问题是,无论是否可以创建报告的single_pages,报告都会被创建。当然,我可以抓住控制器,但我认为这是一种不好的做法。

我其实想实现的是:

  1. 用户上传的PDF报告
  2. 报告被分开,每个单页转变成图像
  3. 每个图像保存到自己的single_page实例
    • 注:single_pages都是一个方法,它返回假,如果不能创建一个或多个页面中创建。
  4. 只有当所有的single_pages被创建,报表才会被保存。

我试图覆盖报告模型中的initialize-method,但我没有得到这个依赖工作。无论报表模型本身是否有错误,或者它被保存了,无论与single_pages有什么关系。

任何帮助将非常感激。

感谢,曼迪

+2

您是否尝试过任何的回调可供选择,如'before_create'或'before_save',在'Report'? – theIV

+0

哦,这几乎是尴尬:-) 我已经试过此回调回来的路上,但还有一个问题,根据我的方法是创建single_pages; 我现在重试它,它像一个魅力。如果你发布这个答案合适,我会给你你赚得的积分;-) – klaffenboeck

+0

单页面实例如何保存失败?有验证失败,还是将页面转换为图像失败的过程? – Olives

回答

1

你有没有尝试过任何可用的回调,如before_createbefore_save,在Report

+0

再次感谢您指点我正确的方向:-) – klaffenboeck

1

你可以把所有的保存在transaction中。

而且,你没有提到它,但我假设你有报告和SinglePages之间的父子关系?如果是这样,那么如果您构建(不保存)页面并保存报告,则rails会尝试保存相关的子项,如果子项未保存,将不保存父项。

+0

感谢建议。现在,我对before_save回调很高兴,尽管我不得不承认,这两个您的解决方案的似乎更Rails的等。我一定会考虑未来的解决方案。 最好的问候,曼迪 – klaffenboeck