0

使用 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 table的新like existing语句?

除了显然connection.execute(string)

4

1 回答 1

2

没有。括号是硬编码的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 没有任何问题;如果你不想写一个快速补丁,我会这样做。

于 2010-08-22T22:54:48.863 回答