2011-06-03 38 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')