【问题标题】:activerecord create_table like existing tableactiverecord create_table 像现有表一样
【发布时间】:2010-08-21 22:43:14
【问题描述】:

使用 Rails/ActiveRecord 2.3.8 我想做:

AnyModel.connection.create_table( 'temp_any_model', temporary: true, id: false, options: 'like any_model' )

但是AR坚持在生成的SQL中添加“()”,即使字段列表是空白的,因为正在克隆表DDL,从而导致例如:

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

有没有办法强制 AR 生成这个简单的create tablenewlike existing 语句?

除了connection.execute(string) ?

【问题讨论】:

    标签: ruby-on-rails activerecord connection create-table


    【解决方案1】:

    不。括号硬编码在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
    

    在字符串文字上使用execute没有任何问题;如果你不想写一个快速补丁,我会这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 2011-02-28
      • 2017-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      相关资源
      最近更新 更多