Wpis z mikrobloga

Mireczki od Ruby on Rails
Prosze o pomoc. Nie mam doswiadczenia z Ruby, a musze napisac kawalek kodu, ktory bedzie ingerowal w czasie rzeczywistym w aplikacje do ktorej importuje dane z bazy SQLite.

W pewnej metodzie mam:

results.each do |r|
params = yield(r)
import_id = params.delete(:id).to_s
...
end

"results" jest obiektem, ktory zostaje zbudowany na bazie query do bazy danych.

Problem:

in `delete': no implicit conversion of Symbol into String (TypeError)


Jak widac przekazalem nieodpowiedni typ do metody. Dokumentacji brak.

Pytania:
1) Jakim typem (czym) jest "params"? Co to jest "yeld(r)" w tym przypadku?
2) Jakim typem powinno byc "results" zeby metoda, ktorej fragment tutaj wrzucilem, zadzialala (nie powinienem jej zmieniac)?

Wydaje mi sie, ze "results" to powinien byc array zlozony z hashy, gdzie jeden hash odpowiada jednemu wierszowi z query do SQLite (?).
Czego bym nie zrobil, wracam ciagle do tego samego TypeError...

#programowanie #ruby #rubyonrails #rails
  • 9
@elobenc: uzywam gemu (gema? Jak to sie odmienia w Ryby?) "sqlite3" z wlasnorecznie skompilowanym silnikiem SQLite (gem laczy sie do silnika). Na tej linii wszystko dziala jak trzeba, bo tak z 1/3 mojego kodu w sumie dziala, a tam jest polaczenie do tej bazy.

Nie mam pojecia po co jest "yeld". Nawet nie wiem co to ustrojstwo robi. Po prostu w moim kawalku kodu uzywam metody z systemu / kodu, ktory
1) Jakim typem (czym) jest "params"? Co to jest "yeld(r)" w tym przypadku?


@mojoakajojo: W tym przypadku to nie wiadomo, yield wykonuje to co znajduje się w bloku przekazanym do metody, np.

def foo
baz = yield("bar")
end
Jak odpalisz foo { |x| "You pass #{x}" } to w zmiennej baz będziesz miał string "You pass bar"
2) Jakim typem powinno byc "results" zeby metoda, ktorej fragment tutaj wrzucilem, zadzialala (nie