剛學軌...爲什麼我無法將對象添加到關係中?
我有以下型號:
class TimeSlot < ActiveRecord::Base
has_and_belongs_to_many :users
end
class User < ActiveRecord::
has_and_belongs_to_many :time_slots
end
我也有一個模型,加入二:
class TimeSlotsUsers < ActiveRecord::Base
attr_accessible :time_slot_id, :user_id
end
在控制檯中,我創建了一個用戶對象,我想將它與TimeSlot關聯起來。我有一個變量ts
,它是一個TimeSlot對象,而u
是一個用戶對象。兩者已經存在於數據庫中。當我做ts.users << u
時,出現錯誤說「ActiveRecord :: StatementInvalid:SQLite3 :: ConstraintException:time_slots_users.created_at可能不是NULL:INSERT INTO」time_slots_users「(」time_slot_id「,」user_id「)VALUES(1,1)。
爲什麼會created_at在TimeSlotsUsers記錄被創建時爲空?是不是被自動創建的嗎?我需要通過關係使用具有一對多的呢?
當使用'has_and_belongs_to_many'時,'updated_at'和'created_at'列不會被Rails設置。獲得這種工作的唯一方法是通過黑客入侵Rails或向數據庫添加觸發器。你可能會刪除它們,或者至少不要求它們。無法真正確定是否需要'has_many:through',但從連接模型看來,time_slots_users'實際上只是一個連接表,沒有任何額外的屬性。在這種情況下,一個簡單的'has_and_belongs_to_many'就足夠了,我的答案解決了這個問題。我同意你的其他意見。 – Mischa 2013-03-21 13:34:45
啊!我沒有意識到'updated_at'和'created_at'沒有設置。這就說得通了。就設計而言,現在該表是一個簡單的連接表。 – 2013-03-21 15:41:28