главная -> статьи -> On-line приложения на платформе Ruby on Rails (часть 2)
 
Работа с базами данных

  Платформа Ruby on Rails обладает очень развитыми механизмами взаимодействия с базами данных (БД), основа - Class ActiveRecord::Base.

  Следует четко представлять, что мы пытаемся извлечь из БД: одну запись, набор записей для дальнейшей обработки и пр. Существует три различных подхода - поиск по идентификатору, поиск множества и поиск первой, естественно, что во второй и третьей позиции предполагается возможность определения опций и условий поиска. Опции могут быть - :conditions, :order, :group и др.

  Рассмотрим несколько примеров:
  • Извлечение одной записи по идентификатору записи из параметра запроса

      @user = User.find(params[:id].to_i)

  • Извлечение всех записей, например, для получения списка

      @users = User.find(:all)

  • Проверка уникальности логина в процессе редактирования данных текущего пользователя (использование условий)

     @user = User.find(:first,
     :conditions => ["id <> ? AND login = ? ",
     session[:my_user].to_i, params[:log]])

  • Выборка книг по автору и наименованию

      @books = Book.find(:all, :order => 'autor,name',
      :conditions => ["autor LIKE ? AND name LIKE ? ",
      params[:autor]+'%', params[:name]+'%']

  • Создание или обновление записи

      @users = User.new(@params['user'])

      @user = User.find(session[:my_user])
      @users.update_attributes(@params['user'])

      Обратите внимание на @params['user']- иной способ работы с параметрами формы. В этом случае объекты формы должны именоваться, как показано на фрагменте кода, и соответствовать полям таблицы базы данных:

      <td>Фамилия*<br>
     <input TYPE="text" id="user_name1" name="user[name1]">
     </td>

    Правило (соглашения rails):
      Переменная, определенная в action контроллера видима на соответствующем представлении (форма, страница).

      Вспомним: контроллеру ставится в соответствие каталог в папке views, а обработчику? (action) - файл *.rhtml с таким же именем, иными словами, выборку записей можем произвести в контроллере, а в форме развернуть в требуемое представление.
    В ASP (см. статью «Сетевые приложения» на сайте) все выполнялось на одной странице.

      И еще. Никто не мешает использовать запросы SQL:

      Book.find_by_sql ["SELECT * FROM books WHERE author LIKE ? AND name LIKE ?",
      и далее аналогично показанному примеру, как кому нравится...

    далее

  •    
      © 2008   Сединко А.М.
      © 2004 design by   kir
    Hosted by uCoz