【发布时间】:2016-05-11 16:39:08
【问题描述】:
我有两个关于 ActiveRecords 的问题:
1)
假设我有一个包含多个用户的应用程序,每个用户都有一张个人资料照片。
我希望用户能够拥有与他们的朋友相同的个人资料照片:这会导致一对多的关系,其中一张照片可以是许多用户的个人资料照片。
当我必须在 Rails 中创建关联时,我必须编写如下内容:
class User < ActiveRecord::Base
belongs_to :photo
end
class Photo < ActiveRecord::Base
has_many :Users
end
现在这对我来说似乎有点奇怪,因为在这种情况下照片属于多个用户,而不是属于一张照片的多个用户。
我做错了,还是我对 Rails 的术语思考过度了?
2)
新案例:
假设用户可以拥有一张个人资料照片。在这种情况下,无法在用户之间共享照片,因此关系是一对一的。
我还想添加一个可以包含照片的帖子实体,并且该照片可以被用户用作个人资料照片。
这是最终实现的样子:
class User < ActiveRecord::Base
has_one :photo
end
class Photo < ActiveRecord::Base
belongs_to :user
belongs_to :post
end
class Post < ActiveRecord::Base
has_one: Photo
end
通过查看Rails Documentation,似乎创建一对一关系的唯一方法是将两个外键放入 Photo 表中:一个用于 Post,一个用于 User。
但是,我希望在 User 表中为 Photo 设置一个外键,在 post 表中为 Photo 设置一个外键。在这种情况下,似乎需要这样实现:
class User < ActiveRecord::Base
belongs_to :photo
end
class Photo < ActiveRecord::Base
has_one :user
has_one :post
end
class Post < ActiveRecord::Base
belongs_to: Photo
end
从语义上讲,这对我来说也没有多大意义。再说一遍,是我做错了什么还是我想多了?
【问题讨论】:
标签: ruby-on-rails database activerecord associations