I’m doing something slightly unorthodox here, in that I’m just populating the database via a migration, and using the contents of a textfile. I’m using the following method which doesn’t import the entire file, can anyone suggest a solution to this?:
class AddChapters < ActiveRecord::Migration
def self.up
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.down
Chapter.all.each do |chapter|
chapter.delete
end
end
end
There could be a number of problems at work here.
The first one is to check that the body field in your table has sufficient length to hold the contents of the text files.
Also, gets might not be what you’re after. From the 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.What you probably want is
IO.readhere to guarantee you get all the file, since it can take a path to a file by default, you don’t need to use File at all here: