Учебники

Ruby on Rails — строительные леса

Пока вы разрабатываете Rails-приложения, особенно те, которые в основном предоставляют вам простой интерфейс для данных в базе данных, часто бывает полезно использовать метод scaffold.

Леса предоставляют больше, чем дешевые демонстрационные ощущения. Вот некоторые преимущества —

  • Вы можете быстро получить код перед своими пользователями для обратной связи.

  • Вы мотивированы более быстрым успехом.

  • Вы можете узнать, как работает Rails, взглянув на сгенерированный код.

  • Вы можете использовать строительные леса в качестве основы, чтобы начать разработку.

Вы можете быстро получить код перед своими пользователями для обратной связи.

Вы мотивированы более быстрым успехом.

Вы можете узнать, как работает Rails, взглянув на сгенерированный код.

Вы можете использовать строительные леса в качестве основы, чтобы начать разработку.

Пример строительных лесов

Чтобы понять леса, давайте создадим базу данных с именем cookbook и таблицу с названием recipes .

Создание пустого веб-приложения Rails

Откройте командное окно и перейдите к месту, где вы хотите создать это веб-приложение кулинарной книги . Итак, выполните следующую команду, чтобы создать полную структуру каталогов.

tp> rails new cookbook

Настройка базы данных

Вот способ создать базу данных —

mysql> create database cookbook;
Query OK, 1 row affected (0.01 sec)

mysql> grant all privileges on cookbook.*
to 'root'@'localhost' identified by 'password';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Чтобы указать Rails, как найти базу данных, отредактируйте файл конфигурации cookbook \ config \ database.yml и измените имя базы данных на cookbook. Оставьте пароль пустым. Когда вы закончите, это должно выглядеть следующим образом —

development:
   adapter: mysql
   database: cookbook
   username: root
   password: [password]
   host: localhost
	
test:
   adapter: mysql
   database: cookbook
   username: root
   password: [password]
   host: localhost
	
production:
   adapter: mysql
   database: cookbook
   username: root
   password: [password]
   host: localhost

Rails позволяет вам работать в режиме разработки, тестовом или производственном режиме, используя разные базы данных. Это приложение использует одну и ту же базу данных для каждого.

Сгенерированный код лесов

С помощью действия scaffold Rails генерирует весь необходимый код динамически. Запустив scaffold как скрипт, мы можем получить весь код, записанный на диск, где мы можем исследовать его и затем начать адаптировать его к нашим требованиям.

Итак, теперь давайте снова начнем генерировать код Scaffold вручную, используя вспомогательный скрипт scaffold —

cookbook> rails generate scaffold recipe

Он генерирует авто-файлы, как показано ниже —

Строительные леса

Контроллер

Давайте посмотрим на код за контроллером. Этот код генерируется генератором скаффолдов . Если вы откроете app / controllers / recipes_controller.rb, то найдете следующее:

class RecipesController < ApplicationController
   before_action :set_recipe, only: [:show, :edit, :update, :destroy]
   
   # GET /recipes
   # GET /recipes.json
   def index
      @recipes = Recipe.all
   end
   
   # GET /recipes/1
   # GET /recipes/1.json
   def show
   end
   
   # GET /recipes/new
   def new
      @recipe = Recipe.new
   end
   
   # GET /recipes/1/edit
   def edit
   end
   
   # POST /recipes
   # POST /recipes.json
   def create
      @recipe = Recipe.new(recipe_params)
      
      respond_to do |format|
         if @recipe.save
            format.html { redirect_to @recipe, notice: 'Recipe was successfully created.' }
            format.json { render :show, status: :created, location: @recipe }
         else
            format.html { render :new }
            format.json { render json: @recipe.errors, status: :unprocessable_entity }
         end
      end
      
   end
   
   # PATCH/PUT /recipes/1
   # PATCH/PUT /recipes/1.json
   def update
      respond_to do |format|
         if @recipe.update(recipe_params)
            format.html { redirect_to @recipe, notice: 'Recipe was successfully updated.' }
            format.json { render :show, status: :ok, location: @recipe }
         else
            format.html { render :edit }
            format.json { render json: @recipe.errors, status: :unprocessable_entity }
         end
      end
      
   end
   
   # DELETE /recipes/1
   # DELETE /recipes/1.json
   def destroy
      @recipe.destroy
         respond_to do |format|
         format.html { redirect_to recipes_url, notice: 'Recipe was successfully destroyed.' }
         format.json { head :no_content }
      end
   end
   
   private
   
   # Use callbacks to share common setup or constraints between actions.
   def set_recipe
      @recipe = Recipe.find(params[:id])
   end
   
   # Never trust parameters from the scary internet, only allow the white list through.
   def recipe_params
      params.require(:recipe).permit(:tittle, :instructions)
   end
end

Когда пользователь приложения Rails выбирает действие, например «Показать», контроллер выполнит любой код в соответствующем разделе — «def show» — и затем по умолчанию отобразит шаблон с тем же именем — «show.html». Еврорадио». Это поведение по умолчанию может быть перезаписано.

Контроллер использует методы ActiveRecord, такие как find, find_all, new, save, update_attributes и destroy для перемещения данных в таблицы базы данных и из них. Обратите внимание, что вам не нужно писать какие-либо операторы SQL, rails позаботится об этом автоматически.

Эта единственная строка кода оживит таблицу базы данных. Это обеспечит простой интерфейс для ваших данных и способы —

  • Создание новых записей
  • Редактирование текущих записей
  • Просмотр текущих записей
  • Уничтожение текущих записей

При создании или редактировании записи scaffold будет выполнять за вас всю тяжелую работу, такую ​​как генерация и обработка форм, и даже обеспечит умную генерацию форм, поддерживая следующие типы входных данных:

  • Простые текстовые строки
  • Текстовые области (или большие блоки текста)
  • Селекторы даты
  • Селекторы даты и времени

Вы можете использовать Rails Migrations для создания и обслуживания таблиц.

rake db:migrate RAILS_ENV=development

Теперь перейдите в каталог поваренной книги и запустите веб-сервер, используя следующую команду:

cookbook> rails server

Теперь откройте браузер и перейдите по адресу http://127.0.0.1:3000/recipe/new. Это предоставит вам экран для создания новых записей в таблице рецептов. Скриншот показан ниже —

Создать рецепт

После того, как вы нажмете кнопку « Создать» , чтобы создать новый рецепт, ваша запись будет добавлена ​​в таблицу рецептов, и на ней будет показан следующий результат:

Создать рецепт

Вы можете увидеть возможность редактировать, показывать и уничтожать записи. Итак, поиграйтесь с этими опциями.

Вы также можете перечислить все рецепты, доступные в таблице рецептов, используя URL-адрес http://127.0.0.1:3000/recipe/list.

Улучшение модели

Rails дает вам много обработки ошибок бесплатно. Чтобы понять это, добавьте некоторые правила проверки в пустую модель рецепта —

Измените app / models / recipe.rb следующим образом, а затем протестируйте свое приложение —

class Recipe < ActiveRecord::Base
   validates_length_of :title, :within => 1..20
   validates_uniqueness_of :title, :message => "already exists"
end

Эти записи дадут автоматическую проверку.

  • validates_length_of — поле не пустое и не слишком длинное.

  • validates_uniqueness_of — повторяющиеся значения перехвачены. Вместо сообщения об ошибке Rails по умолчанию мы дали здесь собственное сообщение.

validates_length_of — поле не пустое и не слишком длинное.

validates_uniqueness_of — повторяющиеся значения перехвачены. Вместо сообщения об ошибке Rails по умолчанию мы дали здесь собственное сообщение.

Альтернативный способ создания лесов

Создайте приложение, как показано выше, и сгенерированный код скаффолда, как показано ниже.

rails g scaffold Recipe tittle:string instructions:text

Приведенный выше код генерирует автоматические файлы с базой данных с использованием sqlite3 с заголовком и столбцом инструкций, как показано под изображением.

Строительные леса

нам нужно перенести базу данных, используя приведенный ниже синтаксис.

$ rake db:migrate RAILS_ENV=development

Наконец, запустите приложение, используя следующую командную строку —

rails server

Результат будет сгенерирован так, как показано на рисунке выше.

Виды

Все представления и соответствующие им методы контроллера создаются командой scaffold, и они доступны в каталоге app / views / recipes.

Чем отличаются строительные леса?

Если вы прошли предыдущие главы, значит, вы уже видели, что мы создали методы для отображения, отображения, удаления и создания данных и т. Д., Но scaffolding выполняет эту работу автоматически.