我有很多用户,他们has_many :social_media_accounts
但是,我希望每个用户只允许一个唯一的social_media_account.type
,
e.g。 User
“Bob”只能有一个social_media_account.type
的“Twitter”
我该怎么做?
class User < ApplicationRecord
has_many :social_media_accounts
end
class SocialMediaAccount < ApplicationRecord
belongs_to :user
enum type: [
twitter: 1,
facebook: 2,
linkedin: 3
]
end
答案 0 :(得分:1)
您可以通过两种方式解决问题:
在数据库方面:为user_id
和social_media_account_id
的唯一索引创建迁移。
示例如下:A migration to add unique constraint to a combination of columns
在应用方面:创建验证,防止为一个social_media_account
创建多个user
(例如:validates :name, uniqueness: { scope: :year}
)。更多信息:http://guides.rubyonrails.org/active_record_validations.html