Это исправлено. Кажется, реализация изменилась.
override func viewDidLoad() {
super.viewDidLoad()
handle = Auth.auth().addStateDidChangeListener({ (auth, user) in
if user == nil {
if let authUI = FUIAuth.defaultAuthUI() {
authUI.delegate = self
let authViewController = authUI.authViewController()
self.present(authViewController, animated: true, completion: {})
}
}
else{
self.userLbl.text = user?.displayName
}
})
}
И вернуться к предыдущей версии:
pod 'Firebase/Core', '<5'
pod 'Firebase/Firestore', '<5'
pod 'FirebaseUI', '<5'
Я делаю что-то вроде этого..... Когда мне нужно добавить пользователя
в seeds.rb:
if User.count == 0
puts "Creating admin user"
User.create(:role=>:admin, :username=>'blagh', :etc=>:etc)
end
Вы можете получить более интересные вещи, чем это, но в этом случае вы могли бы запускать это снова по мере необходимости.
Еще один вариант, который может принести незначительный выигрыш в производительности:
# This example assumes that a role consists of just an id and a title.
roles = ['Admin', 'User', 'Other']
existing_roles = Role.all.map { |r| r.title }
roles.each do |role|
unless existing_roles.include?(role)
Role.create!(title: role)
end
end
Я думаю, что для этого вам нужно сделать всего один вызов БД, чтобы получить массив того, что существует, тогда вам нужно позвонить снова, если чего-то не существует и его нужно создать.
Добавление
из
departments = ["this", "that"]
departments.each{|d| Department.where(:name => d).first_or_create}
в
departments = ["this", "that", "there", "then"]
departments.each{|d| Department.where(:name => d).first_or_create}
это простой пример,
Обновление / переименование
из
departments = ["this", "that", "there", "then"]
departments.each{|d| Department.where(:name => d).first_or_create}
-
departments = ["these", "those", "there", "then"]
new_names = [['these', 'this'],['those','that']]
new_names.each do |new|
Department.where(:name => new).group_by(&:name).each do |name, depts|
depts.first.update_column :name, new[0] if new[1] == name # skips validation
# depts[1..-1].each(&:destroy) if depts.size > 1 # paranoid mode
end
end
departments.each{|d| Department.where(:name => d).first_or_create}
ВАЖНО: Вам необходимо обновить элементы массива departments
, иначе дублирование обязательно произойдет.
Обойти: Добавить валидацию validates_uniqueness_of или валидацию уникальности, сравнивая все необходимые атрибуты, НО не используйте методы, пропускающие валидации .
Еще одна тривиальная альтернатива:
#categories => name, color
categories = [
[ "Category 1", "#e51c23" ],
[ "Category 2", "#673ab7" ]
]
categories.each do |name, color|
if ( Category.where(:name => name).present? == false )
Category.create( name: name, color: color )
end
end