在rails中,當保存一個active_record對象時,它的關聯對象也將被保存。但has_one和has_many關聯在保存對象方面有不同的順序。保存活動記錄,保存關聯對象的順序是什麼?
我有三個簡單的模式:
class Team < ActiveRecord::Base
has_many :players
has_one :coach
end
class Player < ActiveRecord::Base
belongs_to :team
validates_presence_of :team_id
end
class Coach < ActiveRecord::Base
belongs_to :team
validates_presence_of :team_id
end
我預計,當team.save
被調用時,團隊應該與其相關的教練和球員之前保存。
我用下面的代碼來測試這些模型:
t = Team.new
team.coach = Coach.new
team.save!
team.save!
返回true。
但在另一項測試:
t = Team.new
team.players << Player.new
team.save!
team.save!
提供了以下錯誤:
> ActiveRecord::RecordInvalid:
> Validation failed: Players is invalid
我想通了,team.save!
按以下順序保存對象:1)的球員,2)團隊, 3)教練。這就是爲什麼我得到了錯誤:當一名球員被保存時,球隊還沒有一個ID,所以validates_presence_of :team_id
失敗的球員。
有人可以向我解釋爲什麼物體按這個順序保存嗎?這對我來說似乎不合邏輯。
使問題更加明確:當team.save!被調用,是否有可能在玩家對象之前將團隊對象保存到數據庫? – Shuo 2010-04-20 20:59:13