воскресенье, 20 февраля 2011 г.

Работа с консолью в Rails

Чтобы воспользоваться консолью Rails – Rails’овым аналогом для irb нужно набрать команду:
$ rails c
Loading development environment (Rails 3.0.4)
ruby-1.9.2-p0 >
Список свойств экземпляра модели и их тип:
1User
2=> User(id: integer, name: string, login: string, password: string, created_at: datetime, updated_at: datetime)
Создаем новую модель:

1user = User.new name:'Vasya', login:'vasya', password:'paswd'
2=> #<User id: nil, name: "Vasya", login: "vasya", password: "paswd", created_at: nil, updated_at: nil>
Еще можно вот так:
01user = User.new
02=> #<User id: nil, name: nil, login: nil, password: nil, created_at: nil, updated_at: nil>
03user.name = 'Vova'
04=> "Vova"
05user.login = 'vova'
06=> "vova"
07user.password = '123'
08=> "123"
09user
10=> #<User id: nil, name: "Vova", login: "vova", password: "123", created_at: nil, updated_at: nil>
Мы создали модель, но не запись в таблице базы данных! Модель храниться в оперативной памяти компьютера и мы можем работать с нею без каких-либо запросов к базе данных! Для того, чтобы созранить модель в базу данных воспользуемся методом save, но врежде добавим уникальный идентификатор id и время создания поста – created_at:
1user.id = 0
2=> 0
3user.created_at = Time.now
4=> 2011-02-18 23:25:45 +0200
А теперь сохраним модель в базу данных:
1user.save
2=> true
Запись успешно сохранена!
Создадим еще одну модель:
1user = User.new id:1, created_at: Time.now, name:'Petya', login:'petya', password: 'lolpass123'
2=> #<User id: nil, name: "Petya", login: "petya", password: "lolpass123", created_at: "2011-02-18 21:30:08", updated_at: nil>
Добавляем запись в БД:
1user.new_record?
2=> true
3user.save
4=> true
5user.new_record?
6=> false
Метод new_record? возвращает false, если модель сохранена в базе данных и true, если нет.
Хочу заметить, что свойства :id, :created_at и :updated_at можно не указывать (на самом деле их очень редко специально указывают), потому, что при сохранении экземпляра модели в базу данных они будут сгенерированы автоматически.
Получаем все объекты модели User (записи сохраненные и не сохраненные):
01User.all
02=> [
03#<User id: 0, name: "Vova", login: "vova", password: "123", created_at: "2011-02-18 21:25:45", updated_at: "2011-02-18 21:27:14">,
04
05#<User id: 1, name: "Vasya", login: "vasya", password: "paswd", created_at: "2011-02-18 21:18:16", updated_at: "2011-02-18 21:18:16">,
06
07#<User id: 2, name: "Petya", login: "petya", password: "lolpass123", created_at: "2011-02-18 21:30:08", updated_at: "2011-02-18 21:30:57">]
08
09User.all.each {|r| puts r.new_record?}
10false
11false
12false
Итак, мы создали 3 модели User и сохранили их все в базу данных.
Давайте попробуем удалить одну запись:
1user = User.find(0)
2=> #<User id: 0, name: "Vova", login: "vova", password: "123", created_at: "2011-02-18 21:25:45", updated_at: "2011-02-18 21:27:14">
3
4user.delete
5
6=> #<User id: 0, name: "Vova", login: "vova", password: "123", created_at: "2011-02-18 21:25:45", updated_at: "2011-02-18 21:27:14">
7
8User.count
9=> 2 # осталось 2 экземпляра модели
А теперь, давайте отредактируем одну модель. Представим, что пользователь Петя решил помянять свой пароль на более надежный:
1user = User.find(2)
2=> #<User id: 2, name: "Petya", login: "petya", password: "lolpass123", created_at: "2011-02-18 21:30:08", updated_at: "2011-02-18 21:30:57">
3
4user.password = '34dFg&5$hHWEr@#195-1uT'
5=> "34dFg&5$hHWEr@#195-1uT"
6
7user.save
8=> true
Метод find принимает в качестве аргумента индекс записи в БД, или массив записей и возвращает соответствующие объекты – экземпляры класса модели User:
1User.find(1)
2=> #<User id: 1, name: "Vasya", login: "vasya", password: "paswd", created_at: "2011-02-18 21:18:16", updated_at: "2011-02-18 21:18:16">
3
4User.find([1,2])
5=> [#<User id: 1, name: "Vasya", login: "vasya", password: "paswd", created_at: "2011-02-18 21:18:16", updated_at: "2011-02-18 21:18:16">,
6
7#<User id: 2, name: "Petya", login: "petya", password: "34dFg&5$hHWEr@#195-1uT", created_at: "2011-02-18 21:30:08", updated_at: "2011-02-18 21:46:03">]
Также find может принимать значения :first и :last для возвата соответственно первой и последней записи, но по словам разработчиков Rails эти парметры будут удалены из следующей минорной версии – Rails 3.1. Вместо них уже сейчас рекуомендуется использовать методы .first и .last:
01User.find :first
02=> #<User id: 1, name: "Vasya", login: "vasya", password: "paswd", created_at: "2011-02-18 21:18:16", updated_at: "2011-02-18 21:18:16">
03
04User.find :last
05=> #<User id: 2, name: "Petya", login: "petya", password: "34dFg&5$hHWEr@#195-1uT", created_at: "2011-02-18 21:30:08", updated_at: "2011-02-18 21:46:03">
06
07# Лучше используйте .first и .last:
08
09User.first
10=> #<User id: 1, name: "Vasya", login: "vasya", password: "paswd", created_at: "2011-02-18 21:18:16", updated_at: "2011-02-18 21:18:16">
11
12User.last
13=> #<User id: 2, name: "Petya", login: "petya", password: "34dFg&5$hHWEr@#195-1uT", created_at: "2011-02-18 21:30:08", updated_at: "2011-02-18 21:46:03">


Источник: http://rubydev.ru/2011/02/ruby_on_rails_models_1/

Комментариев нет:

Отправить комментарий