-2

ユーザーの入力を、テキスト ファイルに保存されているハッシュ内のすべての名前キーと比較する if/else ステートメントを作成しようとしています。これをどのように書きますか?

user_accts は配列です。

完全な if/else ステートメントの更新:

elsif choice == "2" puts "====== NEW CUSTOMER ======" puts "Choose a username:" プロンプト; login_name = gets.chomp

    #file.open("cust_accts.txt", "r")

    #if @user_accts.map { |acct| acct["name"]}.include?(login_name)
    if @user_accts.any? {|acct| acct["name"] == login_name }
        puts "Sorry, that username has already been taken" 
    elsif   
        puts "Choose a password:"
        prompt; login_password = gets.chomp

        user_accts << create_account(login_name, login_password)
        File.open("cust_accts.txt", "a") { |file| file.puts(user_accts)}            
    end     

元の if/else ステートメント:

if login_name == #??? @user_accts.has_key?(login_name) ???
            puts "Sorry, that username has already been taken" 
        elsif   
            puts "Choose a password:"
            prompt; login_password = gets.chomp

            user_accts << create_account(login_name, login_password)
            File.open("cust_accts.txt", "a") { |file| file.puts(user_accts)}            
        end 

これは、次のコマンドを使用して cust_accts.txt ファイルに入力されるものとまったく同じです。

user_accts << create_account(login_name, login_password)

File.open("cust_accts.txt", "a") { |ファイル| file.puts(user_accts)}

cust_accts.txt

{"name"=>"Tom", "password"=>"popcorn", "balance"=>0}
{"name"=>"Avril", "password"=>"chain", "balance"=>0}
4

3 に答える 3

0

あなたの問題は、「オブジェクトを後で使用するためにRubyに保存するにはどうすればよいですか?」のようです。テキスト ファイルを使用する場合は、JSON や XML などの Ruby オブジェクトに解析できる形式にする必要があります。ただし、データベースを使用することをお勧めします。SQLite のようなデータベースは非常に軽量で、習得が容易です。DB を使用する利点は、DB を使用するときに、結果をハッシュとして返すオプションを設定できることです。

私は同様の問題を抱えていましたが、最終的にDBが道であると判断しました。

于 2013-05-21T17:55:23.963 に答える