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. 創建新的數組實例