さて、私はついにこれを理解したと思います。
「id値はMySQLによって作成されているので、puts dog.id
になるようにrubyのidフィールドを設定/作成/維持したいと思います。 空の文字列にはなりません。」
=> ID値はMySQLで自動的に割り当てられるため、RubyにはそのID値が何であるかを知る方法がないため、dog.idを呼び出すと空の文字列が返されます。
=>オブジェクトのID値を、MySQLデータベースに挿入したときにオブジェクトに自動的に割り当てられるIDと同じになるように、rubyにマップする方法を見つける必要があります。
=>テーブルドッグの作成に使用されるステートメントに注意してください:
CREATE TABLE dogs(
id INT PRIMARY KEY AUTO_INCREMENT,
name TEXT,
color TEXT
);
これは、各犬の作成に変換され、ID(自動的に割り当てられます)、名前、および色があります。犬のオブジェクトの情報の保存を考えるには、2つのアプローチがあります。
dog = { "id" => 'some integer', "name" => "simba", "color" => "grey" }
dog = [1, "simba", "grey"]
私は通常、配列を使用して情報を格納するのが好きですが、今回はハッシュを使用しました(Dogではなくdogで.inspectを呼び出すと、結果は次のようになります:
#<Dog:0x007fbf74c55068 @name="samba", @color="grey">
ハッシュデータ構造を考えさせられます:
{ "id"=> 1, "name"=>"simba", "color"=>"grey"}
Rubyでは、これを行います:
def row_hash(hash)
hash={}
Dog.new(hash[name], hash[color]).tap { |id| id = hash[id] }
end
ここで、hash_rowは、各dogオブジェクトの属性を保持する行を指します。これにより、Rubyは、Dogクラスの新しいインスタンスをインスタンス化するたびに、そのインスタンス化を利用して、hash[id]を「id」にマップする必要があることを基本的に通知します。
これを行うと、rubyの「id」の値にアクセスできます。
PS:これは私に起こったばかりです。しばらく浸透した後、おそらくこの答えを編集します。