Никак не получается обратиться к значению поля (# puts run.hours в
примере):
require "rubygems"
require "sequel"
DB = Sequel.connect('sqlite://some.db')
def InsertRunning(date, distance, hours, minutes, seconds)
running = DB[:running]
running.insert(:date => date,
:distance => distance,
:hours => hours,
:minutes => minutes,
:seconds => seconds)
end
def ShowRunningInfo()
running = DB[:running]
running.each { |run|
puts run.values
# puts run.hours
}
end
def RecreateDatabaseScheme
DB.drop_table :running
DB.create_table :running do
primary_key :id
Date :date
Integer :distance
Integer :hours
Integer :minutes
Integer :seconds
end
end
def FillSampleData
InsertRunning('2009.10.23', '10', 0, 23, 34)
end
RecreateDatabaseScheme()
FillSampleData()
ShowRunningInfo()
Подскажите, пожалуйста, как это можно сделать ?
Posted via RSDN NNTP Server 2.1 beta
Здравствуйте, DemAS, Вы писали:
0. на РСДН есть тег rb, подствечивающий синтаксис руби
1. НИКОГДА не называйте методы с большой буквы (кроме тех случаев, когда точно знаете, что делаете). И вообще, в Руби есть предпочтительный стиль кодирования, который используют чуть более чем все проекты и библиотеки. Изучите его.
2. В Руби есть удобная встроенная функция p (и её библиотечный продвинутый аналог pp) для форматированного вывода сложных значений.
Если вы напишете
running.each { |run|
p run
}
Вы получите вывод:
{:distance=>10,
:hours=>0,
:minutes=>23,
:seconds=>34,
:date=>Fri Oct 23 00:00:00 +0300 2009,
:id=>1}
Это кагбе говорит нам, что run — это хэш (это же можно было узнать, напечатав run.class). Таким образом, запросом
puts run.values
Вы получаете только значения хэша.
А искомый код выглядит так:
puts run[:hours]
Что предсказуемо.
(3). У библиотеки Sequel есть отличная документация с кучей примеров. Там можно например узнать, что вместо
DB.drop_table :running
DB.create_table :running
Можно написать
DB.create_table! :running
Эта строчка будет аналогична «DROP TABLE running IF EXISTS; CREATE TABLE running ...»
Во первых огромное спасибо за столь подробный ответ. Ruby только начал
использовать, поэтому делаю такие глупые ошибки.
> Вы получаете только значения хэша.
> А искомый код выглядит так:
> > puts run[:hours]
>
Угу, спасибо. Что хеш я понимал, и пробовал вот так run[hours].
Posted via RSDN NNTP Server 2.1 beta
Здравствуйте, DemAS, Вы писали:
DAS>Во первых огромное спасибо за столь подробный ответ. Ruby только начал
DAS>использовать, поэтому делаю такие глупые ошибки.
>> Вы получаете только значения хэша.
>> А искомый код выглядит так:
>> >> puts run[:hours]
>>
DAS>Угу, спасибо. Что хеш я понимал, и пробовал вот так run[hours].
Мммм... Не хочу показаться снобом, но сильно рекомендую книжку какую-нибудь почитать. Потому что после получаса чтения базовой документации вы бы поняли, что запись run[hours] означает «элемент из run, индексируемый значением, лежащим в
переменной hours». Ну и про правильное форматирование кода — тоже.
Если хоть немножко по-аглицки читаете, рекомендую Programming Ruby. Первая редакция
бесплатно доступна на сайте авторов (хотя слегка устарела), вторая и третья редакции... скажем так, тоже доступны, если поискать
> Мммм... Не хочу показаться снобом, но сильно рекомендую книжку
> какую-нибудь почитать.
Угу, уже в процессе.
> Ну и про правильное форматирование кода — тоже.
А что с форматированием кода не так? На самом деле код форматировал emacs.
Posted via RSDN NNTP Server 2.1 beta
Здравствуйте, DemAS, Вы писали:
>> Ну и про правильное форматирование кода — тоже.
DAS> А что с форматированием кода не так? На самом деле код форматировал emacs.
Под «форматированием» я подразумевал, что, RecreateDatabaseScheme очень хотела бы стать recreate_database_scheme