Pobieranie danych z bazy do arraya

Witam, mam następujący problem:
W mojej aplikacji napisanej w czystym Rubym mam w bazie tablicę items o kolumnach e1 e2 e3 e4, chciałbym te dane pobrać do arraya.
Dodam, że baza stoi na postgresql, a operacje wykonuję poprzez gem ‘sequel’.
Póki co próbuję to sam rozwiązać, ale ciągle mi coś źle się zczytuje (źle zdefiniowana iteracja chyba :confused: )

array.each do |a| DB.fetch("SELECT * FROM items") do |row| a.e1 = row.e1 a.e2 = row.e2 a.e3 = row.e3 a.e4 = row.e4 end end

Nie bardzo rozumiem co Twój kod ma robić. Jeżeli array ma typ Array to nie można się odwoływać w nim do pól poprzez .e1 .e2 itd. Jeżeli jest to tablica wielowymiarowa to obowiązuje notacja [[x,x]]. Jeżeli hash to array[“klucz”]. I tak jeżeli chcesz z wszystkich rekordów w bazie utworzyć płaską tablicę możesz to zrobić np. tak:

a = Array.new DB.fetch("SELECT * FROM items") do |row| a.push(row[:e1]) a.push(row[:e2]) a.push(row[:e3]) a.push(row[:e4]) end
Fetch zwraca tablice Hash dla każdego wiersza.

jak już to jakoś tak

a = []

DB.fetch(“SELECT * FROM items”) do |row|
a = row
end

Jeśli zwraca ci tablicę baza, jak zwraca hash to
a = []
b = DB.fetch(“SELECT * FROM items”)
b.each {|x,y| a.push(y)}

No albo użyć jakiejś sprytniejszej metody jak collect


No kolega mnie wyprzedził ;]

Przecież to ORM…

W pięknej dokumentacji czytamy:

[code=ruby]DB.create_table :items do
primary_key :id
String :name
Float :price
end

i potem…

items = DB.from(:items)
items = DB[:items] # lub tak

i…

items.each do |row|
p row.name
p row.price
end

lub od razu z WHERE na name np:

DB[:items].filter(:name => ‘Dave Matthews’).each {|row| p row.id}[/code]

dziękuję za podpowiedzi, nakierowały mnie na właściwy trop:

items.each do |row| p = Array1.new p.e1 = row[:e1] p.e2 = row[:e2] p.e3 = row[:e3] p.e4 = row[:e4] array1.push(p) end
o to mi chodziło :slight_smile: Jeszcze raz dzięki :slight_smile:

nie wiem czy nie wstałem jeszcze ale ten twój kod nie może działać jak dla mnie. Nie dość że do balicy nie możesz sie odwołać poprzez strukturę

a = []
a.p1 = …

to nie moze dzialac

Może p to obiekt klasy Array1, która ma takie atrybuty jak e1…e4. A array1 to zwykła tablica, która przechowuje te obiekty? :slight_smile:

Ofca może napisz co chcesz osiągnąć - bo my się tu prześcigamy z pomocą tylko nie wiemy jaki jest kontekst tego kodu.

egzakly - przepraszam za niejasność przy formowaniu problemu - teraz tak spojrzałem i zobaczyłem swoją gafę :confused:

Generalnie jak już wspomniałem działa i dzięki za pomoc :slight_smile: