2011-06-03 49 views

回答

31

分贝/ seeds.rb试试这个执行原始的SQL与耙分贝:种子

connection = ActiveRecord::Base.connection() 
connection.execute("*_YOUR_SQL_HERE_*") 
+1

你好,保罗。如果我想为另一个表或甚至更多的表添加第二个sql查询呢?我应该添加一个新行吗? 'connection.execute(“* _ 2nd_SQL_HERE _ *”)'并注释第一行? – 2013-05-22 09:38:44

2

对于多个SQL声明,我最终分别重复了每条语句:

# db/seeds.rb 

connection = ActiveRecord::Base.connection() 

sql = <<-EOL 
    INSERT INTO users values ('Admin'); 
    INSERT INTO categories values ('Supervisors'); 
EOL 

sql.split(';').each do |s| 
    connection.execute(s.strip) unless s.strip.empty? 
end 
+0

很好的答案!谢谢你。帮助了我很多! – coderuby 2016-09-14 18:22:16

0

在弗雷德里克博斯特伦的答案的变化,可以从文件加载:

# db/seeds.rb 

def execute_sql_file(path, connection = ActiveRecord::Base.connection) 
    require 'active_support/core_ext/object/blank.rb' 
    IO.read(path).split(';').reject(&:blank?).each do |statement| 
    connection.execute(statement) 
    end 
end 

execute_sql_file('my.sql')