create_table activerecord comme table existante
-
30-09-2019 - |
Question
Avec Rails / ActiveRecord 2.3.8 Je voudrais faire:
AnyModel.connection.create_table( 'temp_any_model', temporary: true, id: false, options: 'like any_model' )
Mais AR insiste sur l'ajout « () » à la même SQL généré si la liste des champs est vide puisque la table est cloné DDL, entraînant ainsi par exemple:.
ActiveRecord::StatementInvalid: Mysql::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') like any_model' at line 1:
CREATE TEMPORARY TABLE `temp_any_model` () like any_model
Est-il possible de contraindre AR pour générer cette déclaration simple create table
newlike existing
?
En plus de toute évidence connection.execute(string)
?
La solution
Non. La parenthèse est codée en dur dans create_table
:
def create_table(table_name, options = {})
# snipped ...
create_sql = "CREATE#{' TEMPORARY' if options[:temporary]} TABLE "
create_sql << "#{quote_table_name(table_name)} ("
create_sql << table_definition.to_sql
create_sql << ") #{options[:options]}"
execute create_sql
end
Il n'y a rien de mal à utiliser d'exécuter sur un littéral de chaîne; Je le ferais que si vous ne vous sentez pas envie d'écrire un patch rapide.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow