[sequel] - обратиться к значению поля
От: DemAS http://demas.me
Дата: 07.07.09 11:05
Оценка:
Никак не получается обратиться к значению поля (# 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
Re: Работа над ошибками
От: Гест Украина https://zverok.github.io
Дата: 07.07.09 11:54
Оценка: 4 (1)
Здравствуйте, 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 ...»
Re[2]: Работа над ошибками
От: DemAS http://demas.me
Дата: 07.07.09 13:05
Оценка:
Во первых огромное спасибо за столь подробный ответ. Ruby только начал
использовать, поэтому делаю такие глупые ошибки.

> Вы получаете только значения хэша.

> А искомый код выглядит так:
>
> puts run[:hours]
>


Угу, спасибо. Что хеш я понимал, и пробовал вот так run[hours].
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Работа над ошибками
От: Гест Украина https://zverok.github.io
Дата: 07.07.09 13:42
Оценка:
Здравствуйте, DemAS, Вы писали:

DAS>Во первых огромное спасибо за столь подробный ответ. Ruby только начал

DAS>использовать, поэтому делаю такие глупые ошибки.

>> Вы получаете только значения хэша.

>> А искомый код выглядит так:
>>
>> puts run[:hours]
>>


DAS>Угу, спасибо. Что хеш я понимал, и пробовал вот так run[hours].


Мммм... Не хочу показаться снобом, но сильно рекомендую книжку какую-нибудь почитать. Потому что после получаса чтения базовой документации вы бы поняли, что запись run[hours] означает «элемент из run, индексируемый значением, лежащим в переменной hours». Ну и про правильное форматирование кода — тоже.

Если хоть немножко по-аглицки читаете, рекомендую Programming Ruby. Первая редакция бесплатно доступна на сайте авторов (хотя слегка устарела), вторая и третья редакции... скажем так, тоже доступны, если поискать
Re[4]: Работа над ошибками
От: DemAS http://demas.me
Дата: 07.07.09 16:48
Оценка:
> Мммм... Не хочу показаться снобом, но сильно рекомендую книжку
> какую-нибудь почитать.

Угу, уже в процессе.

> Ну и про правильное форматирование кода — тоже.


А что с форматированием кода не так? На самом деле код форматировал emacs.
Posted via RSDN NNTP Server 2.1 beta
Re[5]: Работа над ошибками
От: Гест Украина https://zverok.github.io
Дата: 07.07.09 18:08
Оценка:
Здравствуйте, DemAS, Вы писали:

>> Ну и про правильное форматирование кода — тоже.


DAS> А что с форматированием кода не так? На самом деле код форматировал emacs.


Под «форматированием» я подразумевал, что, RecreateDatabaseScheme очень хотела бы стать recreate_database_scheme
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.