我正在尝试获取CSV文件的内容,然后使用这些内容生成另一个文件。
我采取的方法是将数据导入模型(http://railscasts.com/episodes/396-importing-csv-and-excel)。
现在我想从数据库中获取数据并创建一个文本文件。
我使用:
创建了一个Ruby文件target = "target.rb"
content = "test"
File.open(target, "w+") do |f|
f.write(content)
end
我无法弄清楚如何填写内容'使用我的数据模型中的数据。
有什么建议吗?
答案 0 :(得分:0)
首先,让我们看一下您编写的代码。它可以全部缩减为:
content = "test"
File.write("target.rb", content)
将它扩展一点并使其更具惯用性:
content = "test"
File.open("target.rb", "w") do |f|
f.write(content)
end
'w+'
用于file mode,除非您理解为什么需要它。而是使用w
,这是“只写”并且足以进行正常的文件写入/创建。File.open
的参数。只需在那里使用文字名称;避免不必要的变量赋值,除非您需要多次使用它。 (如果您不止一次使用文字作业,请考虑使用常量。)您的问题中没有样本输入或所需输出的示例,因此很难解决问题的CSV方面;因此,与CSV有关的问题没有任何问题。 Ruby的CSV类很好地记录了,并且有一些例子涵盖了正常的日常工作。
答案 1 :(得分:0)
我的声誉不足以通过评论向您询问有关您的要求的更多问题,但这里有一些可能有用的事实。
我假设您已经使用所需信息填充了Rails模型。我没有您的示例代码,因此我将提供一个“预订”示例。模型。 Book模型有一个标题和一个作者,都是String类型。
target = "file.txt"
contents = ""
# Get all books as an array. Arrays have iterators so we can use 'each'
Book.all.each do |book|
# get the book title, append it to the string. Add a newline
contents.concat(book.title).concat($/)
# get the book author
contents.concat(book.author).concat($/)
# Just a line separator
contents.concat("-----").concat($/)
end
File.open(target, "w").write(contents)
上面会在文本文件中产生类似的内容:
Book 1
Author 1
-----
Book 2
Author 1
-----
...
阅读有关Rails活动记录的更多信息也可能对您有所帮助:ActiveRecord