在Ruby中读取YAML文件

时间:2015-10-02 04:53:36

标签: ruby yaml

我为业余问题道歉,我还在学习。我正在尝试从Ruby中的YAML文件中提取信息。我认为,因为我已经将信息推送到数组,所以我只需要打印数组。我知道情况并非如此,但是当我查看时,我在文档中找不到任何内容。

require "yaml"

class BankAccount

attr_accessor :first_name, :last_name, :address, :your_account

def initialize
    @your_account = []
    open()
end

def open
    if File.exist?("accountinfo.yml")
    @your_account = YAML.load_file("accountinfo.yml")
    end
end

def save
    File.open("accountinfo.yml", "r+") do |file|
        file.write(your_account.to_yaml)
    end
end

def new_account(first_name, last_name, address)
    puts "Enter your first name:"
    first_name = gets.chomp
    puts "Enter your last name"
    last_name = gets.chomp
    puts "Enter your address:"
    address = gets.chomp
end

def account_review(your_account)
    puts @your_acccount
end

def run
    loop do
        puts "Welcome to the bank."
        puts "1. Create New Account"
        puts "2. Review Your Account Information"
        puts "3. Check Your Balance"
        puts "4. Exit"
        puts "Enter your choice:"
            input = gets.chomp
            case input
            when '1'
                new_account(first_name, last_name, address)
            when '2'
                account_review(your_account)
            when '4'
                save()
                break
            end
    end
end

end
bank_account = BankAccount.new
bank_account.run

3 个答案:

答案 0 :(得分:2)

当我面对这样的事情时,我发现最简单的方法是使用irb查看YAML文件加载后的样子。有时它可能会与您期望的格式略有不同。

在同一目录中,在命令行上运行irb

然后,您可以使用交互式Ruby控制台来运行命令。

require 'pp' - 这有助于您更轻松地查看输出。

然后:

your_account = YAML.load_file("accountinfo.yml")
pp your_account

在上面的代码中,似乎在你的new_account方法中,你实际上没有在@your_account上设置这些属性,而在save方法中你将未定义的变量写入yaml。

保存应该是:

file.write(@your_account.to_yaml) 

新帐户应以:

结束
@your_account[:first_name] = first_name
@your_account[:last_name] = last_name
@your_account[:address] = address

答案 1 :(得分:1)

你永远不会实际设置你的变量。使用self.作为setter的前缀,否则您只需创建一个具有相同名称的局部变量。此外,您根本不设置your_acccount

def new_account
  puts "Enter your first name:"
  self.first_name = gets.chomp
  puts "Enter your last name"
  self.last_name = gets.chomp
  puts "Enter your address:"
  self.address = gets.chomp

  self.your_account = [first_name, last_name, address]
end

另一个问题是您的代码永远不会调用open。这意味着一切正常,直到您结束程序并重新启动它。在致电open以解决此问题之前,请致电account_review

答案 2 :(得分:0)

如果你正在使用Rails,这里有一个简单的方法来阅读YAML文件(标题所说的)

# Load the whatever_config from whatever.yml
whatever_config = YAML.load(ERB.new(File.read(Rails.root.join("config/whatever.yml"))).result)[Rails.env]

# Extract the foo variable out
foo = whatever_config['foo']

我认为我真的不明白你的问题究竟是什么?