0
A
回答
1
我們假設有人(創建者)可以創建一個會議。創作者可能是客戶或聯繫人。
爲此你需要在你的會議桌的「creator_type」和「creator_id」列第一,所以加用script/rails generate migration AddTypeToMeetings
然後編輯一樣遷移文件的遷移:
class AddTypeToMeetings < ActiveRecord::Migration
def self.up
add_column :meetings, :creator_id, :integer
add_column :meetings, :creator_type, :string
end
end
其次,你必須適應你的機型:
meeting.rb
class Meeting < ActiveRecord::Base
# polymorphic association
belongs_to :creator, :polymorphic => true
end
client.rb
class Client < ActiveRecord::Base
has_many :meetings, :as => :creator
end
contact.rb
class Contact < ActiveRecord::Base
has_many :meetings, :as => :creator
end
如何使用:
@my_meeting = Meeting.new
@my_meeting.creator = @my_client
# or if you want a contact:
@my_meeting.creator = @my_contact
你可以閱讀更多關於達此多態關聯:
相關問題
- 1. 這種情況下最好的做法是什麼?
- 2. 如何在這種情況下最好地應用Hibernate-Search?
- 3. 如何最好地設計DB在這種情況下
- 4. 這種情況下最好的情況是什麼?
- 5. 「:」在這種情況下做什麼?
- 6. sched_yield在這種情況下做什麼?
- 7. *在這種情況下做什麼?:
- 8. .map()在這種情況下做什麼?
- 9. 在這種情況下使用uint64_t是不好的做法嗎?
- 10. 得到實際的URL,最佳做法,這種情況下
- 11. 如何做到這一點(在這種情況下最好的方式來查詢數據庫)
- 12. 在這種特殊情況下編寫.gitignore的最佳做法
- 13. 在這種情況下捕獲異常的最佳做法
- 14. 在這種情況下,Base64還是靜態圖像最好?
- 15. 如何爲這種情況做ORM?
- 16. 如何在這種情況下
- 17. 如何使用在這種情況下
- 18. 如何在這種情況下
- 19. 如何在這種情況下
- 20. 如何在這種情況下(MySQL的)
- 21. 如何點擊在這種情況下
- 22. 如何在這種情況下
- 23. 如何調用在這種情況下
- 24. 如何在這種情況下循環
- 25. LinqtoSQL/C#:如何在這種情況下
- 26. 如何在這種情況下
- 27. 是在這種情況下
- 28. 在這種情況下
- 29. 和|| =在這種情況下
- 30. 在這種情況下
西蒙感謝您的回答,但我怎麼能存儲 「ID」 這個對象:?!客戶端或諮詢creator_type只保存類型,是嗎? – 2011-05-17 16:19:40
據我所知,creator_type保存班級名稱,但您可以這樣做:'@ my_meeting.creator.is_a?(Client)'或'@ my_meeting.creator_is_a?(Contact)' – sled 2011-05-17 16:30:00
對不起,您需要'creator_id'列也是如此。我編輯了我的答案;) – sled 2011-05-17 16:31:22