Я полный Rails n00b, и я уверен, что это непростая задача, но у меня проблемы. Я хотел бы взять значение ключа в моем URL-адресе и установить его в: category_id записи в моей базе данных, поскольку я импортирую эту запись из csv.Rails 4 CSV Импортировать и установить значение на значение ключа
я могу заставить его работать, создавая поле category_id в моем файле CSV и используя следующий код, чтобы импортировать файл
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
record = Manufacturer.where(:category_id => row[1], :name => row[0]).first_or_create
record.save!
end
end
Но это требует добавления CATEGORY_ID в CSV .. то, что я хотел что-то вроде
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
record = Manufacturer.where(:category_id => @category, :name => row[0]).first_or_create
record.save!
end
end
где @category настроено в URL. Что-то вроде: ... локальный: 3000/Производители/import_manufacturer/2 category_id = 2 это экономит мой рекорд, но устанавливает идентификатор категории в «нулевой» - это и есть выход сервера:
Started POST "/manufacturers/import?category_id=2" for 127.0.0.1 at 2013-07-18 11:19:55 +0200
Processing by ManufacturersController#import as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"DuAW1pOnaJieBYN7qEQGortYMC74OtLT6tT/e1dKAiU=", "file"=>#<ActionDispatch::Http::UploadedFile:0x007f835e3cae40 @tempfile=#<File:/var/folders/9j/4hs3_7kx11x3h4gkcrrgkwhc0000gq/T/RackMultipart20130718-23913-k0z3a8>, @original_filename="citroen.csv", @content_type="text/csv", @headers="Content-Disposition: form-data; name=\"file\"; filename=\"citroen.csv\"\r\nContent-Type: text/csv\r\n">, "commit"=>"Import", "category_id"=>"2"}
Category Load (0.3ms) SELECT `categories`.* FROM `categories` WHERE `categories`.`id` = 2 LIMIT 1
Manufacturer Load (0.6ms) SELECT `manufacturers`.* FROM `manufacturers` WHERE `manufacturers`.`category_id` IS NULL AND `manufacturers`.`name` = 'CITROEN' ORDER BY `manufacturers`.`id` ASC LIMIT 1
(0.3ms) BEGIN
SQL (0.5ms) INSERT INTO `manufacturers` (`created_at`, `name`, `updated_at`) VALUES ('2013-07-18 09:19:55', 'CITROEN', '2013-07-18 09:19:55')
(0.5ms) COMMIT
(0.2ms) BEGIN
(0.1ms) COMMIT
Manufacturer Load (0.6ms) SELECT `manufacturers`.* FROM `manufacturers` WHERE `manufacturers`.`category_id` IS NULL AND `manufacturers`.`name` = 'CITROEN' ORDER BY `manufacturers`.`id` ASC LIMIT 1
(0.2ms) BEGIN
(0.1ms) COMMIT
Является ли это можно передать переменную в цикл csv.foreach, как это?
Спасибо заранее и извините, если я задаю глупый вопрос.
Блестящий - это сработало. Я уверен, что я, вероятно, должен был это знать, хотя .. Требуется больше обучения :) - спасибо –