Beginner’ Руководство для Ruby On Rails: Часть 2

На прошлой неделе мы опубликовали

Начало работы с Ruby On Rails, первая часть нашей Ruby On Rails введения.Мы объяснили основные идеи Руби и представлены концепции и основные компоненты языка.В этой статье you’ узнаете больше о Rails, вы узнаете, как получить Рубин на Rails работает на вашем компьютере, и получить обзор основных функциональных возможностей Rails и продемонстрировать, как Rails, основная работа частей together.

Я предполагаю, что you’ Re уже знакомы с какой-либо другой форме веб-development, будь то PHP, Python, Perl или Java, а также реляционных баз данных, как MySQL.Во-первых, we’ познакомлю Rails и Ruby, и основные идеи обоих.I’ научу вас достаточно Ruby, так что вы понимаете примеры кода.I’ Расскажу вам, как получить Рубин на Rails работает на вашем компьютере, и I’ дам вам краткий обзор основных функциональных возможностей Rails и продемонстрировать, как Rails’ Основные работы части together.

После прочтения этих частей, вы должны иметь представление о том, Rails для вас.Если вы получаете чувство, что это такое, I’ VL указать Вам на некоторые хорошие учебники в Интернете, которые можно использовать, чтобы узнать Rails.I’ будем также предоставляют много дополнительных рекомендаций чтение, чтобы вы могли копать так глубоко в теме, как вы like.

Вы можете взглянуть на следующие связанные должности:

Получить Rolling

Чтобы получить ваши ноги мокрые с Rails, it’ лучшая просто установить его на своей машине и начать играть вокруг.Для этого требуется всего лишь несколько steps.

В Windows выполните следующие действия:

  1. Установка Ruby 1.8.6 помощью одного щелчка установки с www.ruby-lang.org.Убедитесь в том, чтобы выбрать “Enable Rubygems” во время установки.It’ наверное, хорошая идея, чтобы установить, как рубин admin.
  2. Обновление Rubygems.Rubygems является Ruby’ с системой управления пакетами, и Rails нуждается в новой версии, чем тот, который поставляется в комплекте с инсталлятором.Чтобы сделать это, выполните gem update --system В консоли администратора.Далее, you’ понадобится добавить GitHub жемчужиной сервер Rubygems с gem sources -a http://gems.github.com
  3. Установка Rails и его зависимостей с gem install rails и gem install mysql.(Вы можете использовать другие базы данных, но MySQL является самым простым в настройке.)
  4. Установить MySQL Database от mysql.com.Если you’ наделал Веб-разработка и прежде, вы, наверное, уже есть на вашемmachine.
  5. Создать Rails application.Введите rails -d mysql <appname>.“ Appname” будет имя поддиректории вашего приложения создается in.
  6. Перейти в созданную application’ каталог с и выполнять ruby script/server.Укажите ваш браузер до localhost:3000.Вы должны увидеть Rails приветствуется page.Следуйте его instructions.

Для редактирования Руби код, вы можете использовать любой текстовый редактор.Если вы просто have иметь фантазии IDE, попробуйте NetBeans.Я рекомендую Блокнот , большой, легкий бесплатный editor.

На Mac, you’ повезет. Mac OS 10.5 поставляется с Ruby, Rails и sqlite3.Вам просто нужно обновить свои пакеты путем выдачи нескольких команд:

sudo gem install rubygems-update
sudo update_rubygems

gem install rails
gem install mongrel

Если вам нужна более подробная помощь по установке Rails на 10,4 Tiger, проверить учебник по Rails wiki или в этом блоге post.Теперь вы можете создавать свои приложения с rails <appname>.

В Linux, установка зависит от вашего distribution.

Bird’ S Eye View Of Rails’ Внутренняя Workings

Это та часть, я считаю, отсутствующие в большинстве других учебников на любую тему.Я хочу представить overview из наиболее важных компонентов Рубин на рельсы, чтобы помочь вам понять, как они работают вместе для обработки запросов.Я буду более подробно в разделе контроллер, потому что that’ S самый важный, и если бы я оставил вещи там я wouldn’ т иметь возможность писать все picture.

Controller

Когда запрос попадает вашего сервера Rails приложения, первое обращение компонента это ActionController.

ActionController и все его части соответствуют контроллера части стека MVC.Прежде чем на самом деле обработку запроса, ActionController проверяет его, чтобы определить, какой из контроллеров в приложение отвечает за request.

Эти поиски называется routes и определены в config/routes.rb.Если вы посмотрите в этом файле, you’ увидите строки, подобные этим:

ActionController::Routing::Routes.draw do |map|
  map.resources :users
  map.connect ':controller/:action/:id'
end

Детали определение маршрута может заполнить статье свои собственные.Если you’ Re заинтересована в ее точную работу, посмотрите на ActionController::Routing документации в Rails API.

Упрощенный, два вида маршрутов появятся здесь.Последний является традиционные style определения маршрутов.Они формируются как простые регулярные выражения, с :foo часть бытия placeholder.

Если request’ S URL совпадает с одним из этих выражений, его части отображаются на заполнителей.Затем они рассматриваются вопределить правильный контроллер, действие в контроллере и другие параметры, как id (id всегда содержит идентификатор объекта, на который клиент хочет работать с).Например, URL, как /foo/bar/123 бы быть сопоставлены с FooController,. bar действия и значение params[:id] будет 123

Первая строка представляет собой ярлык для создания большого числа тех маршрутов в один цикл.Маршруты, созданные таким образом присоединиться к REST principles.Опять же, это тема достаточно большой, чтобы оправдать свою собственную статью.Ради этого введения, позвольте мне проиллюстрировать влияние map.resources :users качестве примера.Если поставить такую ​​строку в ваш routes.rb you’ Re говорит Rails, что вы хотите users быть resource.Это означает, что семь маршрутов установлено, что все указывает на UserController.Эти семь маршрутов соответствуют не только против URL просьбу, но и HTTP метод.Отображений:

GET      /users            # will point to the index action
GET      /users/new        # will point to the new action
POST     /users            # will point to the create action
GET      /users/:id        # will point to the show action
GET      /users/:id/edit   # will point to the edit action
PUT      /users/:id        # will point to the update action
DELETE   /users/:id        # will point to the destroy action

Все эти действия UserController должны вести себя в определенных ways.

  • index действие должно отображать список всех существующих users.
  • new действие должно отображать форму для создания нового пользователя, который представлен на /users через POST.
  • create действия должны form’ S вход и создайте нового пользователя в database.
  • show действие должно отображаться пользователю с соответствующим id.
  • edit действие должно отображать форму для редактирования пользователем.Форма должна представить до /users/:id/ через PUT.
  • update действие получает данные формы и обновления пользователей в database.
  • destroy действие удаляет пользователя из database.

Из-за PUT и DELETE aren’ T поддерживается всеми браузерами, форм, которые должны использовать эти методы представляют через POST и сообщить серверу свой intended методом с помощью скрытого поля формы с именем _method.

После контроллера, действия и параметры определяются, действия могут быть вызваны.Но прежде чем это происходит на самом деле, Rails проверяет фильтр chain для действий, чтобы увидеть, есть ли фильтры будут выполнены до выполнения действия.Такие фильтры невероятно полезные вещи, как аутентификация пользователя.Для того, чтобы только зарегистрированные пользователи приложения могут получить доступ к определенным действиям, вы должны определить фильтр, который проверяет сессии действительные учетные данные.Такой фильтр может выглядеть следующим образом:

class UserController < ApplicationController

  # Require valid login to access the update action
  before_filter(:require_login, :o nly => :update)

  # Lots of actions defined here
  # ...
  # ...

private

  def require_login
    render(:text => "Unauthorized", :status => 401) unless session[:user_valid]
  end

end

Let’ S разобрать этот пример строка за строкой.UserController наследует от ApplicationController.Все контроллеры должны.ApplicationController может содержать код, который должен быть общим для всех controllers в вашем приложении.Можно, например, положить require_login фильтр там требуют правильного входа в систему для all Ваш controllers.

Следующая строка объявляет перед фильтром.Делая декларирования с использованием символа:require_login, you’ Re говорит Rails использовать require_login метод в качестве фильтра.Это само по себе было бы применить фильтр ко всем действиямВ UserController.Дополнительный параметр :o nly => :update говорит Rails использовать фильтр только тогда, когда клиент хочет получить доступ к update действий.В реальном контроллере, эта линия будет следовать определениям все действия вашего контроллера содержит.В этом примере, they’ Re опущены для brevity.

Ключевое слово private помечает все методы, определенные потом как частные, чтобы UserController.Это означает, что они can’ т быть использованы в качестве действия.Мы don’ т хотим require_login, которые будут использоваться как действие, так we’ повторной сдачи его here.

Require_login проверяет, является ли поле :user_valid В заседании присутствует.Это, конечно, довольно резкое упрощение реальной схемы аутентификации, но it’ с достаточной ради иллюстрирующие фильтры.Если пользователь вошел в систему, фильтр делает простую ошибку message.

Сейчас, here’ SA подробно вы должны знать, чтобы понимать это.Rails работает через все фильтры, применяя к действию и только прерывает запрос processing по трем причинам:

  1. Фильтр повышает Error.
  2. Фильтр возвращает false.
  3. Фильтр делает нечто или redirects.

Таким образом, это одна строка это все, что необходимо для защиты наших чувствительных действий против вредоносных клиентов.Опять же, I’ м упрощения этого немного.Для того, чтобы приложение действительно безопасен, вы, конечно, потребуется немного больше кода, чтобы должным образом поддерживать состояние сеанса.Чтобы узнать больше о фильтрах, ознакомьтесь с ActionController::Filters::ClassMethods документации в Rails API.

Let’ посмотрим, как Rails продолжается обработка request.

После client’ просьбу прошел все фильтры, действие, наконец, выполняется.Let’ S работать с нашим примером из секции фильтров и предположим, клиент хочет выполнить update действие после редактирования пользователем в from предусмотренных edit действий.Оба действия могут быть определены следующим образом:

def edit
  @user = User.find(params[:id])
end

def update
  @user = User.find(params[:id])
  if @user.update_attributes(params[:user])
    redirect_to users_url
  else
    render :action => :edit
  end
end

Let’ работа через эту строку за строкой снова.Во-первых, обратите внимание, что акции определяется как простой параметр-менее методы controller.Их вход и выход осуществляется немного по-другому от того, что you’ D ожидать от метода.Действия получить все сведения, необходимые для обработки запроса от контроллера через несколько доступа, в основном, params и session.Есть больше (cookies request), но they’ повторно не используется почти так же часто, как эти двое, и я don’ хотите, чтобы усложнить больше, чем необходимо here.

params метод возвращает все Параметры request.Они, как правило в результате ее querystrings или postbody, но также может быть создан из JSON или XML-структуры данных.Через маршрутов, части URL также может стать параметров.Этогде :id параметр в пример чтения.Если клиент просит /users/123/edit/ и у нас есть определение маршрута map.resources :users, затем 123 становится :id параметр для действия прав, потому что определение маршрута генерирует (среди прочих) маршрута, который выглядит следующим образом:

map.route '/users/:id/edit',
          :controller => 'users',
          :action     => 'edit',
          :method     => :get

<!-- The "session" method can be used to access data in the session. Whatever you put in here will be available in subsequent actions in the same session. This is commonly used to store log-in information or things like shopping cart contents. -->

Для выходе, действие в основном есть два варианта.Это может быть либо перенаправить пользователя или оказывать template.Шаблоны для приложения Rails организованы таким же образом контроллеров.Они живут в app/templates/<controllername>/<action>.html.erb, а если нет выхода, указанный в действии, Rails предоставляет шаблон, принадлежащих к этому действию по умолчанию.That’ почему вы don’ вижу никаких выходных код в действии редактирования.Единственная строка в edit тянет пользователей мы хотим изменить из базы данных и помещает его в переменную экземпляра контроллера, чтобы сделать его доступным для template.

update Действие начинается с того же оператора, опять же выборке пользователь формирует базу данных.В своем следующем шаге, user’ с атрибутами будут обновлены с учетом данных, полученных от действия на стороне клиента форме.Обновление возвращается true на успех.В этом случае, клиент перенаправляется в список users.

Это перенаправление заслуживает более пристального осмотра.redirect_to Команда принимает URL, но вместо жесткого кодирования этих URL-адресов (/users в данном случае), это обычный использовать URL помощниками, как users_url.Помощники генерируются автоматически по маршруту или ресурс definitions.

Если обновление user’ с атрибутами не удастся, происходят две вещи внутри update_attributes вызов.Первый user’ S errors имущество будет наполнен подробности о том, почему обновление didn’ T успеха, и вызов будет возвращать ложными, а не правда.В результате, клиент не будет перенаправлен, вместо render называется, с :action => :edit качестве параметра.Это говорит render чтобы сделать шаблон принадлежащих edit действие тока controller.

Почему бы не перенаправить на действия редактирования, вы можете спросить?Мы могли бы сделать это, но we’ D потерять все изменения мы сделали для пользователей и теряют информацию о возникших ошибках.Когда редактирования шаблона оказывается вместо при обработке update действий, пользователей, которые не удалось обновить все еще находится в памяти со всеми ее отложенных изменений и errors.Мы можем использовать эти данные в шаблон, чтобы предварительно заполнить форму ценности, которые мы только что ввели (но didn’ T сохранять в базе данных) и предоставить клиенту информацию о том, что пошел wrong.

There’ одна последняя важная вещь, чтобы отметить здесь около render и redirect_to.Не видно из этих примеров, но призванию render или redirect_to не остановить обработку action.Это как раз методами, а не специальные заявления потока управления.Таким образом, при render называется, шаблон isn’ T оказана еще, а, скорее, контроллер делает шаблон after действие обработаны.Любые заявления после render ещеexecuted.

Model

Второй важной частью MVC в Rails является моделью.Его роль играет ActiveRecord модуль, реализация картины одного и того же name.ActiveRecord :: Base функции в качестве базового класса для моделей в приложении.Если вы черпаете свои модели этого класса, you’ Придется им автоматически связаны с таблицами в database и может очень легко загружать, редактировать, сохранять, создавать, удалять или перечислить их.Отображения между структурой и поведением ваших моделей и таблиц в базе данных полностью автоматизированы в основном, при условии, что вы будете придерживаться нескольких правил при проектировании таблиц.Общие принципы:

  1. Ваше имя таблицы множественном числе, подчеркнул вариант вашего имени класса.Таким образом, класс < ...

    Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров

Comments are closed.