开发者

Rails ActiveRecord::Migration - writing a textfile contents to the database

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}/cha开发者_C百科pters/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.read here 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:

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"))


Try using the class method IO.read instead. IO.gets only reads until the first separator (usually newline).


IO.read is the correct solution

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜