Выполнить сценарий sql внутри seed.rb в rails3 - PullRequest
16 голосов
/ 03 июня 2011

Я хочу выполнить этот сценарий SQL внутри моего seed.rb

LOAD DATA LOCAL INFILE '/home/list-38.csv'
INTO TABLE list
FIELDS TERMINATED BY ':'
LINES TERMINATED BY '\n'
(email,name,password);

Я проверил эту ссылку, но не смог найти решение. Так что, как только мы запустим rake db: seed

Как заполнить базу данных mysql, запустив сценарии sql на платформе Ruby Rails? она выводит мои данные в таблицу.

любые вопросы .. ответить

Thanx

Ответы [ 3 ]

32 голосов
/ 03 июня 2011

Попробуйте это в db / seed.rb для выполнения необработанного SQL с rake db: seed

connection = ActiveRecord::Base.connection()
connection.execute("*_YOUR_SQL_HERE_*")
5 голосов
/ 13 апреля 2015

Для нескольких 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
2 голосов
/ 09 июня 2017

Вариант ответа Фредрика Бострома, который можно загрузить из файла:

# 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')
...