0
A
回答
0
嵌套属性使事情有点棘手。所以为了创建新的实例,我必须为资源及其嵌套项目使用dup
方法。
一般来说,建议保持控制器纤细,并使模型变胖。不过,我已决定包括该代码为我的发票控制器:
def revise_save
@contact = Contact.find(params[:contact_id])
@invoice = @contact.invoices.find(params[:invoice_id])
@invoice_old = @invoice.dup
@invoice.invoice_items.each do |item|
@invoice_old.invoice_items << item.dup
end
@invoice.datum = DateTime.now.to_date
# archive old invoice
# @invoice_old. ...
@invoice_old.save
# make old new invoice
@invoice.datum = Time.now
# ...
@invoice.update(invoice_params)
redirect_to invoices_path
end
注意,在这种解决方案当前编辑的(原)发票成为新的发票,旧的矛盾是重新创建。
感谢@ iwan-b指引我朝着正确的方向。
1
而是一个控制器动作我把代码中的模型,利用回调:
before_save do |rec|
if !rec.new_record?
attrb = rec.attributes.delete_if{|k, v| ["id"].include? k }
Book.create(attrb)
rec.restore_attributes
rec.year = rec.year + 2 # some custom change
true
end
end
我把所有属性,除非“ID”(否则我得到一个错误)用于创建具有新纪录新的属性。 然后我恢复现有记录的属性。我在保存之前做了一些自定义更改。
1
我对Rails很新,但这看起来很简单。正如你所提到的用户正在'更新'一张发票,你的控制器视图可能已经通过了所有数据供用户进一步修改。
当你提交表单时,你的更新操作可以很容易地更新当前记录数据,还有,因为它是自动创建这个
虽然之上的新的,你需要明确:
- 如果一个新的发票记录每一个发票记录
更新时间(创建可以创建相同发票的很多副本) - 你如何使旧记录存档,以避免重复
- 可以在“附加”的修订是自动的,很容易通过一个算法处理...
相关问题
- 1. mysqli_fetch_object时创建新的对象实例
- 2. Grails。 GORM。创建新实例时出错
- 3. Java:创建新实例
- 4. 重新创建实例
- 5. 创建KClass的新实例
- 6. android.app.Application单例实例被重新创建
- 7. 好的更新片段而不是创建新的实例?
- 8. 创建/更新实例时禁用AWS RDS备份?
- 9. 创建它时更新模型实例的字段? (Rails)
- 10. MediaBrowserServiceCompat实例每次运行时更改都会重新创建
- 11. 为什么在创建新实例时创建DUP
- 12. 添加新类的新实例时创建自动变量
- 13. Rails - 在创建新用户时创建其他类的新实例
- 14. 创建类的新的实例,作为字符串和更新设置方法
- 15. Ajax和Rails 4:创建实例变量并更新视图而不刷新
- 16. OOP实例更新
- 17. 在Android中创建新类的实例
- 18. 崩溃后创建新实例
- 19. @GeneratedValue当创建一个新的实例
- 20. AS3从蓝图创建新实例
- 21. 创建一个新的类实例
- 22. 添加架构或创建新实例?
- 23. ADF - 创建会话bean的新实例
- 24. CRM创建一个CrmConnection的新实例
- 25. 创建Pusher窗体的新实例javascript
- 26. 创建新实例失败PHP
- 27. 如何创建记录的新实例?
- 28. 创建控件的新实例动态
- 29. 使用新词创建对象实例
- 30. 创建新的数组实例