Rails ActiveRecord :: Migration - запись содержимого текстового файла в базу данных - PullRequest
0 голосов
/ 01 декабря 2010

Я делаю что-то немного неортодоксальное в том, что я просто заполняю базу данных с помощью миграции и использую содержимое текстового файла.Я использую следующий метод, который не импортирует весь файл, может кто-нибудь предложить решение этой проблемы:

</p> <p>class AddChapters < ActiveRecord::Migration</p> <p>def self.up</p> <pre><code>Chapter.create!(:title => "chapter 1", :body => File.open("#{Rails.root}/chapters/chapter1.txt").gets) Chapter.create!(:title => "Chapter 2", :body => File.open("#{Rails.root}/chapters/chapter2.txt").gets) Chapter.create!(:title => "Chapter 3", :body => File.open("#{Rails.root}/chapters/chapter3.txt").gets)

end

def self.вниз Chapter.all.each do | глава |chapter.delete конец конец конец

Ответы [ 3 ]

0 голосов
/ 01 декабря 2010

Здесь может возникнуть ряд проблем.

Во-первых, убедитесь, что поле body в вашей таблице имеет достаточную длину для содержания содержимого текстовых файлов..

Кроме того, вы можете получить не то, что вам нужно.Из RDoc:

Reads the next ``line’’ from the I/O stream; lines are separated by sep_string. A separator of nil reads the entire contents, and a zero-length separator reads the input a paragraph at a time (two successive newlines in the input separate paragraphs). The stream must be opened for reading or an IOError will be raised. The line read in will be returned and also assigned to $_. Returns nil if called at end of file.

То, что вы, вероятно, хотите, это IO.read здесь, чтобы гарантировать, что вы получите весь файл, так как он может по умолчанию указать путь к файлуЗдесь вообще не нужно использовать файл:

Chapter.create!(:title => "chapter 1",
  :body => IO.read("#{Rails.root}/chapters/chapter1.txt"))

Chapter.create!(:title => "Chapter 2",
  :body => IO.read("#{Rails.root}/chapters/chapter2.txt"))

Chapter.create!(:title => "Chapter 3",
  :body => IO.read("#{Rails.root}/chapters/chapter3.txt"))
0 голосов
/ 01 декабря 2010

IO.read - правильное решение

0 голосов
/ 01 декабря 2010

Попробуйте вместо этого использовать метод класса IO.read. IO.gets читает только до первого разделителя (обычно перевод строки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...