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