2016-06-27 6 views
0

У меня есть следующая структура моего приложения API:Как мне разрешить пользователю отправлять электронную почту между приложениями, но не внутри одного приложения?

class App < ActiveRecord::Base 
    has_many :users 
end 

class User < ActiveRecord::Base 
    belongs_to :app 
end 

Как разрешить пользователю иметь один и тот же уникальный по электронной почте между приложениями, но не внутри одного приложения? Если я пишу:

class User < ActiveRecord::Base 
    belongs_to :app 
    validates :email, uniquiness: true 
end 

Это подтверждает уникальность электронной почты во всем мире среди всех пользователей, но я хочу, чтобы подтвердить только среди пользователей конкретной модели приложения, которые пользователь принадлежит.

Другими словами, я хочу, чтобы пользователь мог подписать с той же электронной почты для приложения с идентификатором 1 и приложение с идентификатором 2.

ответ

2

Используйте область, чтобы ограничить эту проверку:

validates :email, uniquness: { scope: :app } 

Подробнее информация о validates, а также вариант uniquness можно найти в Rails Validation Documentation

+0

Или используйте 'validates_uniqueness_of: адрес электронной почты, объем:: app' и читать [ActiveRecord :: Validations :: Docs методы класса] (HTTP: // апи. rubyonrails.org/classes/ActiveRecord/V alidations/ClassMethods.html # method-i-validates_uniqueness_of) –

+1

Также может быть полезно добавить индекс, такой как 'add_index (: users, [: email,: app_id]), unique: true'. –

+1

@NicNilov Я уверен, что 'validates' является предпочтительным методом проверки. 'validates_uniqueness_of' - это старый способ сделать это. То же самое относится к 'validates_length_of',' validates_presence_of' и т. Д. –

 Смежные вопросы

  • Нет связанных вопросов^_^