2017-12-07 2 views
0

を返す私はSQLiteのデータベースから夫婦値をつかむしようとしていますが、代わりに私はSELECT -ingだ値を返すのではなく、別の配列の内部配列にその値を返しています。ルビーSQLiteのSELECTが不要なアレイ


マイコード:

def self.find(id, database_connection) 
    name = database_connection.execute("SELECT name FROM pokemon WHERE id = ?", id) 
    type = database_connection.execute("SELECT type FROM pokemon WHERE id = ?", id) 

    pokemon_inst = Pokemon.new(id: id, name: name, type: type, db: database_connection) 
end 

問題:私は実行

pry.binding

name出力[["Pikachu"]]

type出力[["electric]]


はこの正しく動作していますか?私はちょうどname[0][0]にデータにアクセスする必要があると思いますか?

答えて

0

execute()メソッドは、配列内に返されるすべてをラップし、各データベース行は配列に配置されます。したがって、2つの配列にあると照会されている単一の値が正しいためです。

それは私がこれに私のコードを調整することになる必要があるとして、すべてが動作しているので:

def self.find(id, database_connection) 
    pokemon = database_connection.execute("SELECT * FROM pokemon WHERE id = ?", id).flatten 
    name = pokemon[1] 
    type = pokemon[2] 

    pokemon_inst = Pokemon.new(id: id, name: name, type: type, db: database_connection) 
end 

調整がflattenにそれが照会データを割り当てられ、その配列から個々の値を割り当てるために配列されています。

+0

exec_queryとto_hashを使用して、キーと値のペアの結果を取得することもできます。 –

+0

これは 'name、type = database_connection.execute( 'SELECT name、type FROM pokemon WHERE id =?'、id).flatten'でもかまいません。また、Railsの型は予約語です。 –

+0

タイプが制限外であることを知っておくとよいでしょう。 – mtrussell