На прошлой неделе мы опубликовали
Начало работы с 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 выполните следующие действия:
- Установка Ruby 1.8.6 помощью одного щелчка установки с www.ruby-lang.org.Убедитесь в том, чтобы выбрать “Enable Rubygems” во время установки.It’ наверное, хорошая идея, чтобы установить, как рубин admin.
- Обновление Rubygems.Rubygems является Ruby’ с системой управления пакетами, и Rails нуждается в новой версии, чем тот, который поставляется в комплекте с инсталлятором.Чтобы сделать это, выполните
gem update --system
В консоли администратора.Далее, you’ понадобится добавить GitHub жемчужиной сервер Rubygems сgem sources -a http://gems.github.com
- Установка Rails и его зависимостей с
gem install rails
иgem install mysql
.(Вы можете использовать другие базы данных, но MySQL является самым простым в настройке.) - Установить MySQL Database от mysql.com.Если you’ наделал Веб-разработка и прежде, вы, наверное, уже есть на вашемmachine.
- Создать Rails application.Введите
rails -d mysql <appname>
.“ Appname” будет имя поддиректории вашего приложения создается in. - Перейти в созданную 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, 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.Дополнительный параметр 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 по трем причинам:
- Фильтр повышает Error.
- Фильтр возвращает false.
- Фильтр делает нечто или 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 и может очень легко загружать, редактировать, сохранять, создавать, удалять или перечислить их.Отображения между структурой и поведением ваших моделей и таблиц в базе данных полностью автоматизированы в основном, при условии, что вы будете придерживаться нескольких правил при проектировании таблиц.Общие принципы:
- Ваше имя таблицы множественном числе, подчеркнул вариант вашего имени класса.Таким образом, класс < ...
Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров