如何在Rails中验证每个`user`的唯一`social_media_account.type`?

时间:2016-08-23 07:13:21

标签: ruby-on-rails activerecord

我有很多用户,他们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

1 个答案:

答案 0 :(得分:1)

您可以通过两种方式解决问题:

  1. 在数据库方面:为user_idsocial_media_account_id的唯一索引创建迁移。 示例如下:A migration to add unique constraint to a combination of columns

  2. 在应用方面:创建验证,防止为一个social_media_account创建多个user(例如:validates :name, uniqueness: { scope: :year})。更多信息:http://guides.rubyonrails.org/active_record_validations.html