Чтобы воспользоваться консолью Rails – Rails’овым аналогом для irb нужно набрать команду:
$ rails c
Loading development environment (Rails 3.0.4)
ruby-1.9.2-p0 >
Loading development environment (Rails 3.0.4)
ruby-1.9.2-p0 >
1 | User |
2 | => User(id: integer, name: string, login: string, password: string, created_at: datetime, updated_at: datetime) |
Создаем новую модель:
1 | user = User. new name: 'Vasya' , login: 'vasya' , password: 'paswd' |
2 | => #<User id: nil, name: "Vasya", login: "vasya", password: "paswd", created_at: nil, updated_at: nil> |
Еще можно вот так:
01 | user = User. new |
02 | => #<User id: nil, name: nil, login: nil, password: nil, created_at: nil, updated_at: nil> |
03 | user.name = 'Vova' |
04 | => "Vova" |
05 | user.login = 'vova' |
06 | => "vova" |
07 | user.password = '123' |
08 | => "123" |
09 | user |
10 | => #<User id: nil, name: "Vova", login: "vova", password: "123", created_at: nil, updated_at: nil> |
Мы создали модель, но не запись в таблице базы данных! Модель храниться в оперативной памяти компьютера и мы можем работать с нею без каких-либо запросов к базе данных! Для того, чтобы созранить модель в базу данных воспользуемся методом save, но врежде добавим уникальный идентификатор id и время создания поста – created_at:
1 | user.id = 0 |
2 | => 0 |
3 | user.created_at = Time .now |
4 | => 2011 - 02 - 18 23 : 25 : 45 + 0200 |
А теперь сохраним модель в базу данных:
1 | user.save |
2 | => true |
Запись успешно сохранена!
Создадим еще одну модель:
1 | user = 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> |
Добавляем запись в БД:
1 | user.new_record? |
2 | => true |
3 | user.save |
4 | => true |
5 | user.new_record? |
6 | => false |
Метод new_record? возвращает false, если модель сохранена в базе данных и true, если нет.
Хочу заметить, что свойства :id, :created_at и :updated_at можно не указывать (на самом деле их очень редко специально указывают), потому, что при сохранении экземпляра модели в базу данных они будут сгенерированы автоматически.
Получаем все объекты модели User (записи сохраненные и не сохраненные):
Получаем все объекты модели User (записи сохраненные и не сохраненные):
01 | User.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 |
09 | User.all. each {|r| puts r.new_record?} |
10 | false |
11 | false |
12 | false |
Итак, мы создали 3 модели User и сохранили их все в базу данных.
Давайте попробуем удалить одну запись:
1 | user = 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 |
4 | user.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 |
8 | User.count |
9 | => 2 # осталось 2 экземпляра модели |
А теперь, давайте отредактируем одну модель. Представим, что пользователь Петя решил помянять свой пароль на более надежный:
1 | user = 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 |
4 | user.password = '34dFg&5$hHWEr@#195-1uT' |
5 | => "34dFg&5$hHWEr@#195-1uT" |
6 |
7 | user.save |
8 | => true |
Метод find принимает в качестве аргумента индекс записи в БД, или массив записей и возвращает соответствующие объекты – экземпляры класса модели User:
1 | User.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 |
4 | User.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:
01 | User.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 |
04 | User.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 |
09 | User.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 |
12 | User.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/
Комментариев нет:
Отправить комментарий