我寫了一個gem,允許將Google Spreadsheets轉換爲Rails模型。這個過程的順序包括創建所有模型,然後連接它們的關聯,然後保存所有的模型。它支持所有可用的關聯類型,並且在任何情況下都可以禁止一個,創建模型,建立關聯,然後保存模型正常工作。唯一的例外是:通過使用未保存的模型建立一個通過vs有很多
我有一個簡單has_one, through
協會(屬性訪問略去了):
class Left < ActiveRecord::Base
has_many :middles, dependent: :destroy
has_many :rights, through: :middles
end
class Right < ActiveRecord::Base
has_one :middle, dependent: :destroy
has_one :left, through: :middle
end
class Middle < ActiveRecord::Base
belongs_to :left
belongs_to :right
end
我發現一些不一致的行爲取決於哪一方是由該協會的任務:
分配從右至左:
left = Left.new
right = Right.new
left.rights << right
left.middles #[]
right.middle #nil
left.save!
left.middles # <Middle theme_id: 1, archive_resource_id: 1 >
分配從右至左:
left = Left.new
right = Right.new
right.left = left
left.middles #[]
right.middle <Middle theme_id: nil, archive_resource_id: nil >
right.save!
right.middle # <Middle theme_id: nil, archive_resource_id: 1 >
這種行爲似乎很不一致。爲什麼是這樣?爲什麼這種方式工作而不是其他方式?有沒有辦法與兩個未保存的記錄建立這種關係?
我明白,顯而易見的解決方案是建立關係之前保存一切,但如上所述,我需要的車型當協會建立,而在所有其他類型的關聯,那裏是未保存在這方面沒有問題。
如果'''Left'''和'''Right'''車型也從'''的ActiveRecord ::繼承基地'''? 爲什麼'''左'''''has_many:right'''?也許它應該是'''has_many:rightS'''或'''has_one:right'''? – freemanoid
@freemanoid對不起,是的,他們是(修正問題)。 – Undistraction
'''has_many:middleS'''和'''has_many:rightS''' – freemanoid