Вы действительно можете массово назначать защищенные поля. Вот как это сделать. В вашей модели определите следующее:
def attributes_protected_by_default
default = [ self.class.inheritance_column ]
end
То, что вы делаете здесь, переопределяет базовый метод:
# The primary key and inheritance column can never be set by mass-assignment for security reasons.
def self.attributes_protected_by_default
default = [ primary_key, inheritance_column ]
default << 'id' unless primary_key.eql? 'id'
default
end
... для включения только inheritance_column
, исключая столбец id
или primary_key
. Теперь вы можете присвоить ID этой модели в массовом порядке.