Рельсы 4.0.4, Руби 2.1.2
Я хочу использовать STI так:
User < ActiveRecord::Base
Admin < User
Но на данный момент у меня есть:
User < ActiveRecord::Base
Info < ActiveRecord::Base
Итак, я изменил свои модели, а затем начал писать свою миграцию. В моей миграции я сначала добавляю столбец, чтобы разрешить STI:
add_column :users, :type, :string
Затем я хочу обновить пользователей, которые в настоящее время находятся в базе данных, чтобы они были администраторами.
# Place I'm currently stuck
Затем я перемещаю все свои информационные записи в таблицу пользователей.
Info.all.each { |info| User.create(name: info.name, email: info.email) }
Кажется, все работает, кроме превращения предыдущих пользователей в администраторов. Вот некоторые вещи, которые я пробовал:
# Seems to work, but doesn't actually save type value
User.each do |user|
user.becomes!(Admin)
user.save! # evaluates to true, doesn't have any errors
end
# Seems to work, but doesn't actually save type value
# I've also tried a combo of this one and the above one
User.each do |user|
user.type = "Admin"
user.save! # evaluates to true, doesn't have any errors
end
User.each do |user|
user = user.becomes!(Admin)
user.save! # evaluates to true, doesn't have any errors
end
# Seems to work, but doesn't actually save type value
User.each do |user|
user.update_attributes(type: "Admin")
end
Каждый раз, когда локальные пользовательские переменные имеют правильный тип («Администратор»), вместе с сохранением оценивается как true, но когда я проверяю Admin.count
или проверяю значение типа Users, оно всегда равно нулю. Я знаю, что вы не должны их менять, но это просто перенос данных в STI, и тогда я смогу начать создавать пользователей или администраторов с соответствующим классом.
По крайней мере, я думаю, что Rails должен вызывать ошибку, устанавливать ошибку или каким-то образом сообщать разработчику, что он не выполняет вызовы сохранения.
User.where(...)
иAdmin.all
, получил те же результаты, что и до обновлений. - person Tom Prats   schedule 02.10.2014