sql >> データベース >  >> RDS >> Mysql

Rubyとmysql2を介してSequelProでIDフィールドを作成/維持する方法

    さて、私はついにこれを理解したと思います。

    「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:これは私に起こったばかりです。しばらく浸透した後、おそらくこの答えを編集します。




    1. 連続出現によるMySQLグループ

    2. SQL Serverの文字列からHTMLタグを取り除く方法は?

    3. SQLServerデータベースサイズを選択します

    4. MySQLで、重複エントリエラーが発生した場合、主キーが自動インクリメントされないようにするにはどうすればよいですか?