1
A
回答
3
如果您已有數據,則無法在創建回調操作中執行此操作,因爲這些項目已經創建。然而,創建回調將幫助您爲新的對象,您將創建:
after_create :set_order_attribute
def set_order_attribute
self.update_columns(order: id) if order.nil?
end
技術上可以更新遷移爲SQL語句現有的數據,但我不建議使用涉及的ActiveRecord模型的命令隨着模型的變化,遷移可能會隨時間斷開。要做到這一點在遷移,你將有一個在執行命令:最高法(不知道你想什麼行爲:下),像這樣:
def up
table_name = "foo"
execute "UPDATE #{table_name} SET order = id;"
end
另外,您可以創建一個單獨的rake任務做更新;這將使您的遷移更加清潔,並讓您更好地控制何時運行更新任務。
0
我認爲在遷移中傳遞給:default的值不能是一個變量。我會嘗試這樣的回調:
before_save :initialize_order
def initialize_order
self.order = self.id
end
+1
在這種情況下,建議不要使用before_save before_create。 – 2018-01-10 11:53:15
相關問題
- 1. 將ID設置爲默認搜索Solr
- 2. 如何在Clojure的記錄中爲字段設置默認值?
- 3. Rails 4 UUID作爲默認值的ID
- 4. 將默認值設置爲textarea(AngularJS)
- 5. 將默認值設置爲模型(Sails.js)
- 6. 將VCProject屬性設置爲默認值
- 7. 將SharedPreferences(不DefaultSharedPreferences)設置爲默認值
- 8. MYSQL設置默認值是新的ID
- 9. 將document.title設置爲默認
- 10. 無法將默認布爾參數設置爲默認值
- 11. 如何設置默認值:Rails
- 12. Mongo更新記錄與值設置在相同的查詢
- 13. 設置默認值
- 14. 設置默認值
- 15. 設置默認值
- 16. 設置默認值
- 17. 設置默認值
- 18. 設置默認值
- 19. 設置默認值
- 20. 將所有設置設置重置爲默認值
- 21. 與最後一個記錄爲默認
- 22. Rails strip_insignificant_zeros默認設置爲true
- 23. Rails options_for_select默認設置
- 24. Rails的time_select設置默認
- 25. httpRequest for循環爲所有記錄設置相同的值
- 26. Rails將所有記錄值設置爲零
- 27. Rails 3 ActiveAdmin。如何爲關聯記錄設置默認排序順序?
- 28. 如何設置默認值以在delphi中記錄
- 29. 從one2many字段創建記錄時設置默認值 - odoo
- 30. Rails根據記錄中的列值將記錄設置爲只讀
有趣的是,直到我使用'after_create'之後,這對我才起作用。 – Fomentia 2015-09-16 11:51:45
@Fomentia這將是因爲在數據庫中創建對象之前未設置「id」。 – 2016-09-02 16:52:08
@PaulPettengill良好的捕獲 - 修復 – PinnyM 2016-09-02 16:58:28