Пишем блог на Ruby on Rails. Введение в Ruby on Rails Создание модели Article

💖 Нравится? Поделись с друзьями ссылкой

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

По крайней мере, вам следует взять несколько уроков программирования. Я не говорю о языках front-end, типа HTML и CSS - вы, наверное, уже знаете многое из этого материала. Я говорю о back-end вещах.

Если вы знаете, как заложить фундамент, тогда вы сможете лучше понять, как спроектировать остальную часть сайта. Дело в том, что изучение программирования сделает из вас более эрудированного дизайнера. Кроме того, кому бы ни хотелось нанять дизайнера, который знает все от проектирования до разработки сайта?

Хитрость заключается в выборе места для начала. Изучение программирования может быть сложным процессом, особенно, если вы выбираете один из наиболее сложных языков, как C ++ или PHP.

Итак, с чего лучше всего начать? Ответ один: Ruby on Rails является одним из лучших языков программирования и фреймворком для изучения основ проектирования.

Почему Ruby самый лучший выбор?

Для начинающих, Ruby является одним из самых простых языков для усвоения, особенно если у вас есть некоторый опыт написания HTML или CSS, который у большинства дизайнеров есть.

Одной из первых программ, которую вы сделаете, начиная изучать какой-либо язык - это позорный «Привет мир!», который включает в себя выведение этих слов на экран.

С языками типа C ++, может быть где-то от пяти до семи строк кода, только чтобы отобразить эти два слова. А вот если использовать Ruby, там будет только одна линия, и одна команда.

Puts "hello, world!"

Вот и все! Это все, что вам нужно, чтобы напечатать слова «Привет, мир!» на экране. Довольно легко, правда?

Ruby on Rails также очень «сухой» язык. Являясь одним из принципов развития, DRY (сухой) означает «Don’t Repeat Yourself» (Не повторяйся!) - то есть, не программируйте элемент снова, когда вы можете использовать тот, что вы уже создали. Это делает Ruby очень легким и часто используемым для разработки языком программирования, так как он нацелен на быстрое и эффективное выполнение проекта.

Ruby или Rails?

Ruby - это язык программирования. Rails - это фреймворк, который использует Ruby, чтобы выполнить свою работу. Фреймворк Ruby on Rails - это коллекция сборных или предварительно написанного кода, который помогают ускорить процесс создания новых проектов. Изначально, он был создан, чтобы разработать средство управления проектами Basecamp. Кроме Basecamp, есть и другие популярные веб-приложения, построенные с помощью Rails, как например, 500px, ThemeForest и MyFitnessPal.

Как только вы поймете, как работать с языком Ruby, и заставите материал работать во фреймворке Ruby On Rails, вы сможете начать создавать веб-приложения.

Ruby - на пике популярности!

Благодаря взрыву популярности мобильных устройств и техники, которая всегда на связи, Ruby невероятно популярен сейчас. И, вероятно, так будет и дальше. Индекс TIOBE оценивает Ruby, как 13-ый самый популярный язык программирования. В соответствии с новыми тенденциями, по данным Indeed.com, Ruby также испытывает на удивление высокий спрос.

TIOBE Index

В любом случае, чтобы вы не выбрали - спрос или популярность - Ruby довольно популярен. Это делает его одним из лучших мест для начинания, потому что, как только вы разобрались в этом языке, вы можете получить работу довольно быстро. И это прежде чем вы приступите к изучению другого языка, чтобы расширить свои навыки.

У Ruby есть надежная опора!

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

Благодаря фреймворку Ruby On Rails, уже есть тонны предварительно существующего кода, который вы можете использовать в собственных проектах. Ruby Gems, библиотека фреймворков Ruby, имеет более чем 600 000 библиотек, из которых можно выбрать нужное.

Каждый раз, когда вы изучаете что-то новое, вам нужно много документации и поддержки. Есть тонна мест, где можно найти учебные материалы, учебники, руководства и даже Q & A форумы. Если вы столкнулись с конкретной проблемой, простой веб-поиск, вероятно, устранит ее. Это важно.

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

Ruby «допускает» больше контроля над дизайном

Если вы просто веб-дизайнер, создание веб-сайта может быть длительным и сложным процессом. Когда вы садитесь за работу с программистом и обсуждаете необходимый back-end для вашего сайта, вам часто приходится жертвовать front end’ом, чтобы все работало должным образом.

В конечном счете, это может привести к продукту, который выглядит совершенно по-другому, чем ваше первоначальное видение. Программисту может быть все равно, но для вас это, вероятно, будет проблематично.

Вы не столкнетесь с проблемами, подобного рода, если вы будете программмировать сами. Не обязательно зависеть от других, чтобы получить законченный проект, и вы будете гораздо лучше понимать, что может быть достигнуто с точки зрения разработки. Конечно, было раз или два, когда цели вашего проекта были слишком высоки для одного программиста или команды разработчиков? Когда вы изучаете язык подобный Ruby, вы можете наслаждаться простотой понимания потребностей, и возможностей, с другой стороны.

По сути, Ruby предназначен для использования в веб-приложениях и веб-разработке, поэтому это идеальное место для начинающих веб-дизайнеров. Как только вы поймете этот язык и узнаете, как использовать фреймворк Ruby on Rails, вы будете иметь гораздо больше контроля над вашими проектами.

Где учиться Ruby?

Самый лучший способ выучить язык - это погрузиться в него и работать с ним. Есть много руководств и учебников, к которым вы также можете обратиться. Если у вас развито визуальное память, и лучше понимаете благодаря визуальным презентациям, тогда вперед в YouTube - там есть большой выбор обучающих видеороликов.

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

Один из моих любимых ресурсов - и, совершенно бесплатный - для обучения Rails - это Учебник Rails Майкла Хартла. Он проведет вас от простого до сложного проекта в вашем собственном темпе обучения, и вы можете начать с самого начала абсолютно без знаний Ruby on Rails.

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

К написанию данного текста автора подтолкнуло изучение ряда найденных в Глобальной Сети материалов, которые вполне можно было бы обозначить одной и той же рубрикой/тегом: Как я выучил Ruby (или Ruby on Rails, PHP, JS, C++, etc) за три дня .

Ну или тому подобное. Автору, в свою очередь, сразу же припомнился (неконтролируемые ассоциации) ряд анекдотов, объединенных опять-таки общей тематикой, заключающейся в оценочной характеристике действий, которые возможно выполнить сдуру... русский язык могуч и невероятно афористичен, но, к сожалению, не представляется возможным процитировать эти шедевры здесь; соответственно, ничего не остается, как предложить вниманию читателя собственноручно написанный вариант доки из цикла Как с удовольствием и относительно быстро научиться работать в Ruby on Rails .

Рабочий пример описанного в статье кода, в числе других Rails Examples - всегда возможно найти в тестовом блоге автора на herokuapp.com , welcome.

Методика проста, и автор совершенно не претендует здесь на лавры первооткрывателя: необходимо, чтобы было интересно, а результаты бы не заставили себя ждать. Не мешает таже попробовать поиграть на собственных слабостях, порой ведь и тщеславие способно быть на пользу делу; итоги разработки должны быть таковы, чтобы их можно было с гордостью предъявить читателям, друзьям и коллегам в Сети, задеплоив куда-нибудь на Heroku или Amazon , также - чтоб можно было вновь и вновь к ним возвращаться, перестраивая и усовершенствуя, форумы и StackOwerflow нам всем в помощь. Вот я и говорю, почему бы не написать, для начала, свой блог на Ruby on Rails ?

Оттолкнуться предлагаю от отличной доки Getting Started with Rails либо его русскоязычной адаптации Rails для начинающих , также Build a Blog with Ruby on Rails , также в помощь материалы этого блога, ссылки на которые легко находятся в левом сайдбаре. А дальше - все, дальше магия, на первых порах все расписано как по нотам, открываем консоль - и вперед... автор считает своим долгом сделать лишь несколько пояснений и технических рекомендаций, призванных облегчить адепту поиск и обретение Светлой Стороны Силы, и не более того. Это - только ваш бой, смелее вперед и возвращайтесь с победой.

Итак. Step-by-step первого мануала отлично выверен и не вызовет у вас, я надеюсь, никаких хлопот; все, что от вас требуется - быть внимательным, скрупулезно повторяя подробно прокомментированные шаги... и через час ваш первый блог уже готов, можно передохнуть и переходить ко второму, несколько более интересному. И именно вот здесь, может статься, вам пригодятся несколько напутствий, к которым сейчас и приступим.

Начнем с утверждения, что вот эти методы вполне способны (как вариант) выглядеть так, как показано далее, но никоим образом не так, как в оригинале:

app/controllers/posts_controller.rb

# Update action updates the post with the new information def update if @post.update_attributes(post_params) flash[:notice] = "Successfully updated post!" redirect_to posts_path else flash[:alert] = "Error updating post!" render:edit end end # The show action renders the individual post after retrieving the the id def show end # The destroy action removes the post permanently from the database def destroy @post = Post.find(params[:id]) if @post.destroy flash[:notice] = "Successfully deleted post!" redirect_to posts_path else flash[:alert] = "Error updating post!" end end

А впрочем, попробуйте и так и эдак, почему нет. Идем далее.

Второй блог, хотя и более сложный (добавлены редактор статей CKEditor и devise , гибкое средство для аутентификации в rails-приложениях), почему-то лишен в оригинале возможности оставлять комментарии. Вам придется собственноручно восполнить этот недостаток: действуйте по аналогии с описанием создания первого блога, потребуются лишь совсем незначительные изменения: попросту говоря, вместо article и articles первого блога будут у вас post и posts в блоге втором, вот и вся, по сути, разница. Будьте внимательны, и все получится.

Recaptcha к комментариям привязать придется также самостоятельно: да-да, это вам тут не Joomla, привыкайте. Впрочем, титанических усилий не потребуется, процесс подключения Recaptcha подробно описан в статье Подключаем Recaptcha в Rails application . Далее совсем нелишне отрегулировать devise таким образом, чтобы блог работал (хотя бы на первых порах!) в однопользовательском режиме, позволяя многочисленным своим читателя режим READ ONLY, иными словами - запретим для начала регистрацию новых пользователей. В Сети достаточно самых разных рецептов на предмет того, как это сделать, но, на мой взгляд, самый грамотный хак такого рода находится в Wiki devise, в материале под названием How To: Set up devise as a single user system . А именно: создаем новый контроллер:

app/controllers/registrations_controller.rb:

Class RegistrationsController < Devise::RegistrationsController before_action:one_admin_registered?, only: [:new, :create] protected def one_admin_registered? if ((Admin.count == 1) & (admin_signed_in?)) redirect_to root_path elsif Admin.count == 1 redirect_to new_admin_session_path end end end

затем переопределяем его в routes.rb, и это все:

#devise_for:admins devise_for:admins, controllers: { registrations: "registrations"}

CKEDITOR.editorConfig = function(config) { // config.enterMode = 2; //disabled

Completely config.enterMode = CKEDITOR.ENTER_BR // pressing the ENTER KEY input
config.shiftEnterMode = CKEDITOR.ENTER_P; //pressing the SHIFT + ENTER KEYS input

Config.autoParagraph = false; // stops automatic insertion of

On focus };

Пожалуй, для начала это действительно все... черт, самое главное я чуть было не забыл. Если деплоить свой новый блог собираетесь на Heroku - добавьте эти три строчки в

config/application.rb

Config.assets.precompile += Ckeditor.assets config.assets.precompile += %w(ckeditor/*) config.autoload_paths += %W(#{config.root}/app/models/ckeditor)

Иначе CKEditor откажется у вас работать на новом месте.

Ruby начал разрабатываться 23 февраля 1993 года и вышел в свет в 1995 году. Название навеяно языком Perl, многие особенности синтаксиса и семантики из которого заимствованы в Ruby (pearl - «жемчужина», ruby - «рубин»). Целью разработки было создание «настоящего объектно-ориентированного», лёгкого в разработке, интерпретируемого языка программирования.

Язык обладает независимой от операционной системы реализацией многопоточности, строгой динамической типизацией, сборщиком мусора и многими другими возможностями. Кроссплатформенная реализация интерпретатора языка является полностью свободной.

Ruby on Rails (RoR) - фреймворк, написанный на языке программирования Ruby. Он реализует архитектурный шаблон Model-View-Controller для веб-приложений, а также обеспечивает их интеграцию с веб-сервером и сервером баз данных. Является открытым программным обеспечением и распространяется под лицензией MIT.

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

Эта книга предназначена для тех, кто хочет писать на Ruby как профи. В ней рассказывается, как проектировать красивые API и работать с приёмами функционального программирования. Новичкам книга не подойдёт, а вот тем, кто уже разбирается в Ruby, она точно пригодится.

Цель данной книги - научить читателей эффективно использовать язык Ruby. В книге рассматривается версия Ruby 2.1. Издание содержит около 400 различных примеров, сопровождающихся четкой постановкой задачи и ее решением с подробными комментариями.

Книга отличается достаточно низким входным порогом. Для ее изучения необязательно знать основы веб-разработки. В книге материал о Ruby on Rails, популярного фреймворка для разработки веб-приложений, дается с нуля. Автор Майкл Хартл, помимо Ruby on Rails, знакомит читателя с основами самого языка Ruby, языка запросов SQL, CSS, HTML. В книге много внимания уделено практическому использованию возможностей фреймворка. Также можно ознакомиться с фрагментом книги.

А эта книга пригодится именно начинающим. Её сложность увеличивается по нарастающей, и в каждом следующем разделе используются навыки, полученные в предыдущих.

С «Изучаем Ruby» вы в легкой и увлекательной форме на практике освоите все возможности этого языка, который сначала стремительно захватил сердца программистов Калифорнии, а затем и России.

Прочитав эту книгу, вы научитесь писать элегантный код с применением всех его уникальных особенностей.

В этой книге подробное разбирается внутреннее устройство языка Ruby. Знать сам Ruby читателю не обязательно, но вот знание C и, в особенности, принципов ООП будет огромным плюсом.

Эта книга отлично подойдёт для знакомства с Ruby. В ней разбираются все необходимые основы: от установки языка до обработки файлов и ООП. Каждая тема снабжена понятными примерами.

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

Эта книга разбита на несколько секций, различающихся по сложности. Сперва рассказывается о настройке и основных возможностях Ruby, а затем речь идёт о стандартной библиотеке и темах для продвинутых.

В этой статье я хочу рассказать, как создать простое приложение, работающее с базой данных MySQL в среде Ruby on Rails 3. Можно рассматривать этот материал, как пошаговое руководство для начинающих программистов Rails.

Итак, для работы нам необходима установленные рельсы и rubygems. С последними у меня вчера была проблема, поэтому пришлось удалить пакет rubygems1.8 не понятно как оказавшийся в системе и поставить rubygems1.9 Напомню, что разрабатываю я на Ubuntu, хотя для Windows команды консоли Rails думаю будут теми же. В качестве среды разработки использую NetBeans с плагином для Ruby on Rails. Про установку неплохо написано в моего коллеги.

Проверка ссылок

Необходимо убедиться, что каталог /usr/bin содержит символические ссылки rails, rake, ruby, bundler на файлы из каталога /usr/local/ruby/bin. Дл просмотра ссылок используйте команду:

в зависимости от того, что хотите отфильтровать.

Создаем приложение

Я создал специальный каталог для своих ruby-приложений.

mkdir /home/andrey/ruby
cd /home.andrey/ruby

У рельсов есть много консольных утилит, которые сильно облегчают работу, в особенности по прототипированию. Для создания приложения, использующего в качестве базы mysql выполним команду:

app — это название нашего нового приложения. После выполнения команды мы увидим, как rails сделал нам каркас будущего приложения.

root@vaio:~/ruby# rails new app -d mysql
create
create README
create Rakefile
create config.ru
create .gitignore
create Gemfile
create app
create app/controllers/application_controller.rb
create app/helpers/application_helper.rb
create app/mailers
create app/models
create app/views/layouts/application.html.erb
create config
create config/routes.rb
create config/application.rb
create config/environment.rb
create config/environments
create config/environments/development.rb
create config/environments/production.rb
create config/environments/test.rb
create config/initializers
create config/initializers/backtrace_silencers.rb
create config/initializers/inflections.rb
create config/initializers/mime_types.rb
create config/initializers/secret_token.rb
create config/initializers/session_store.rb
create config/locales
create config/locales/en.yml
create config/boot.rb
create config/database.yml
create db
create db/seeds.rb
create doc
create doc/README_FOR_APP
create lib
create lib/tasks
create lib/tasks/.gitkeep
create log
create log/server.log
create log/production.log
create log/development.log
create log/test.log
create public
create public/404.html
create public/422.html
create public/500.html
create public/favicon.ico
create public/index.html
create public/robots.txt
create public/images
create public/images/rails.png
create public/stylesheets
create public/stylesheets/.gitkeep
create public/javascripts
create public/javascripts/application.js
create public/javascripts/controls.js
create public/javascripts/dragdrop.js
create public/javascripts/effects.js
create public/javascripts/prototype.js
create public/javascripts/rails.js
create script
create script/rails
create test
create test/fixtures
create test/functional
create test/integration
create test/performance/browsing_test.rb
create test/test_helper.rb
create test/unit
create tmp
create tmp/sessions
create tmp/sockets
create tmp/cache
create tmp/pids
create vendor/plugins
create vendor/plugins/.gitkeep

Заходим в папку с ним и устанавливаем необходимые гемы. Гемы — это подключаемые библиотеки, необходимые для проекта (аналог PHP’шных PECL и PEAR).

После этого, в консоли будет что-то вроде этого:

andrey@vaio:~/ruby/app> sudo bundle install
Using rake (0.8.7)
Using abstract (1.0.0)
Using activesupport (3.0.0)
Using builder (2.1.2)
Using i18n (0.4.2)
Using activemodel (3.0.0)
Using erubis (2.6.6)
Using rack (1.2.1)
Using rack-mount (0.6.13)
Using rack-test (0.5.6)
Using tzinfo (0.3.23)
Using actionpack (3.0.0)
Using mime-types (1.16)
Using polyglot (0.3.1)
Using treetop (1.4.8)
Using mail (2.2.9)
Using actionmailer (3.0.0)
Using arel (1.0.1)
Using activerecord (3.0.0)
Using activeresource (3.0.0)
Using bundler (1.0.3)
Using mysql2 (0.2.6)
Using thor (0.14.4)
Using railties (3.0.0)
Using rails (3.0.0)
Your bundle is complete! Use `bundle show ` to see where a bundled gem is installed.

Это значит, что все гемы установлены и подключены. Если чего-то не хватает, то bundle сам скачает их с rubygems и установит. Вот этого мне долгое время не хватало в php, по сути получается установщик проекта. Список зависимых гемов находится в файле Gemfile в корне проекта.

Конфигурирование

Теперь надо укаать реквизиты доступа к БД нашего проекта. Открываем проект в NetBeans: New Project -> Ruby -> Ruby on Rails application with existing source. Указываем путь, в моем случае это будет (/home/andrey/ruby/app) и название проекта(app). В качестве Ruby Platform выбираем установленную в системе, а не встроенную в NetBeans. Нажимаем Finish и проект создался. Открываем псевдо-папку Configuration и файл database.yml. Здесь надо указать логин и пароль для доступа к базе, желательно сразу для всех трех окружений (development, test, production). Окружение — это среда в которой будет запускаться наше приложение,

  • development — компьютер разработчика,
  • production — сервер промышленной эксплуатации,
  • test — работа в режиме тестирования на сервере непрерывной интеграции или компьютере тестировщика.

rails generate model User name:string hashed_password:string salt:string

Сразу видно, чего нагенерил нам Rails:

invoke active_record
create db/migrate/20101107054200_create_users.rb
create app/models/user.rb
invoke test_unit
create test/unit/user_test.rb
create test/fixtures/users.yml

Отлично, теперь нам надо создать базу данных. Выполняем для этого:

andrey@vaio:~/ruby/app$ rake db:create
(in /home/andrey/ruby/app)
andrey@vaio:~/ruby/app$ rake db:migrate
(in /home/andrey/ruby/app)
== CreateUsers: migrating ====================================================
— create_table(:users)
-> 0.0061s
== CreateUsers: migrated (0.0063s) ===========================================

Консоль выводит добавленные данные. Смотрим в phpmyadmin и видим новые базы app_development и app_test, а также таблицы в них. Теперь настала очередь добавить реальные данные. Для этого запускаем консоль rails

Консоль — это не просто консоль, а консоль IRB в контексте вашего приложения. В качестве примера создадим двух пользователей:

andrey@vaio:~/ruby/app$ rails console
Loading development environment (Rails 3.0.0)
irb(main):001:0> user1 = User.new
=> #
irb(main):002:0> user1.name = «andrey»
=> «andrey»
irb(main):003:0> user1.save
=> true
irb(main):004:0> user2 = User.new
=> #
irb(main):005:0> user2.name = «vasiliy»
=> «vasiliy»
irb(main):006:0> user2.save
=> true

irb(main):007:0> exit
andrey@vaio:~/ruby/app$

Посмотрим в базу, и действительно у нас появились два пользователя. Хочется отметить, что Rails сам добавил столбцы первичного ключа и поля created_at (дата создания) и updated_at (дата изменения) модели.

Модель у нас есть, данные тоже. Пора запустить наше приложение.

andrey@vaio:~/ruby/app$ rails server
=> Booting WEBrick
=> Rails 3.0.0 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
INFO WEBrick 1.3.1
INFO ruby 1.9.2 (2010-08-18)
INFO WEBrick::HTTPServer#start: pid=4193 port=3000

Приложение запущено, открываем броузер по адресу и видим тестовую страничку.

Отлично, приложение работает. Но оно показывает обычную HTML-страничку из папки /public/index.html. А мы хотим динамическую. Открываем второе окно консоли (т.к. в первом у нас запущен вер-сервер руби — WebRick), заходим в папку с проектом и набираем там следующую команду:

andrey@vaio:~/ruby/app$ rails generate controller index index
create app/controllers/index_controller.rb
route get «index/index»
invoke erb
create app/views/index
create app/views/index/index.html.erb
invoke test_unit
create test/functional/index_controller_test.rb
invoke helper
create app/helpers/index_helper.rb
invoke test_unit
create test/unit/helpers/index_helper_test.rb
andrey@vaio:~/ruby/app$

Этим мы создали коонтроллер Index, в нём действие Index и вид этого действия index.html.erb Делаем Refresh(F5) в NetBeans и смотрим наши файлы. Замечательно. Теперь нам надо как-то перенаправить маршрут для главной страницы на созданное нам действие контроллера. Открываем файл маршрутов (Configuration/routes.rb) и раскомментируем там следующую строчку:

# You can have the root of your site routed with «root»
# just remember to delete public/index.html.
root:to => «welcome#index»

Только вместо welcome пишем тоже index. Ну привык я по Zend Framework’у, что контроллер и действие по-умолчанию называются index Не забыавем удалить (или переименовать) файл public/index.html).

root:to => «index#index»

Обновляем страничку в броузере, и видим, что теперь отображается наш вид.

Index#index

Отлично. Теперь можно кодить Заходим в наш вновь созданный контроллер (Controllers -> index_controller.rb) и пишем там такой текст действия:

class IndexController < ApplicationController
def index
@users = User.find(:all)
end
end

Тепеь открываем вид Views/index/index.html.erb и пишем там такой код:

Index#index


Find me in app/views/index/index.html.erb


<% for user in @users -%>
<%=user.name%>

<% end %>

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

Index#index

Find me in app/views/index/index.html.erb

andrey
vasiliy

Отлично! Приложение создано!

Спасибо!

Если вам помогла статья, или вы хотите поддержать мои исследования и блог - вот лучший способ сделать это:

Сегодня в интернетах я нашел историю о том, как некто Джеймс Фенд учился Ruby on Rails в течение 12 недель. Ниже вы можете прочитать относительно точный перевод этой истории, и, надеюсь, вдохновиться на изучение этого прекрасного фреймворка (и прекрасного языка).

Прежде чем начать, я хотел бы представить Джоша Криуса (http://joshcrews.com) и поблагодарить его за то, что убедил меня начать изучать Ruby on Rails; без него, его помощи и без часов, которые он потратил на то, чтобы быть моим наставником, я не писал бы это сегодня. Спасибо.

23 января я запустил идею своей мечты, Freelancify.com . Ровно 12 недель назад я был техническим предпринимателем (tech entrepreneur), который тратил тысячи долларов, чтобы создать приличный MVP (минимально жизнеспособный продукт), потому что мне недоставало знаний. Одной из причин (как я тогда думал) было то, что обучение было для меня слишком сложным или заняло бы чрезмерно много времени. Я думал (как и многие другие), что программисты (и некоторые действительно) рождаются с набором волшебных навыков в решении проблем и математике, которые делают их гениями программирования. И именно 12 недель назад я принял лучшее решение за долгое, по-настоящему долгое время . Больше ни одна из моих идей не останется не более чем идеей. Теперь у меня есть возможность запускать рабочие версии, тратя деньги лишь на хостинг и прилагая некоторые усилия. На сегодняшний день этот набор навыков - это примерно как пригнать кучу тракторов во времена калифорнийской золотой лихорадки, пока все остальные используют простые лопаты. Я предлагаю каждому научиться писать код . Здесь я хотел бы добавить уточнение: ранее, назвал пост “Как я изучил Rails за 8 недель”, однако, если быть точным, то учитывая дату запуска, получается 12 недель. Однако за 8 недель я почувствовал, что знаю достаточно, а следующие четыре недели были потрачены в большей степени на то, чтобы заставить полученные знания работать, а не на обучение.

Какие навыки я имел прежде, чем начал изучать Rails?

Я был веб-дизайнером, обладающим познаниями в HTML и CSS, и, в основном, фокусировался на дизайне UI и UX. Самое сложное, что я делал с реальным кодом (не считая HTML) - это возможность настраивать Wordpress. Одним словом, я абсолютно не имел представления ни о том, что такое MVC-фреймворк, ни о том, как в целом работают базы данных. Дизайн, макет и HTML для Freelancify были созданы мной за две недели в июне 2011-го.

Почему я принял решение учиться?

Возвращаясь в июнь 2011-го, когда макет был готов, я начал поиски кодера, который сделал бы макет функционирующим. Макет был практически готов: у меня были текстовые поля, выпадающие меню, формы, кнопки, ссылки, ведущие куда необходимо, и так далее. Нашел разработчика, и, если в двух словах, то парень мне не подошел. Я остался с кучей долгов и даже не близким к завершению продуктом. Тогда я связался с Джошем Криусом (с ним я познакомился на встрече, посвященной Ruby on Rails, которую он организовал в Нэшвилле), и встретился с ним, чтобы понять, можно ли сделать хоть что-то из того, что у меня осталось от разработчика. К сожалению, починка и доработка кода заняла бы не меньше времени, чем разработка с нуля грамотным программистом. Я упал духом, понимая, что не смогу позволить себе снова тратить тысячи долларов на разработку с нуля. И тогда Джош сказал… “Почему бы тебе просто не научиться обращаться с Ruby on Rails, этот проект был бы прекрасным способом ” и затем “Я могу даже встречаться с тобой дважды в неделю и помогать тебе в обучении ”. Я потратил целую ночь на раздумья. Моими вариантами было: найти комфортную работу и оплатить счета ИЛИ рискнуть всем, чтобы научиться Rails и, в конце концов, лакомиться лучшим раменом, который только готовят в Италии. Я решил. Позвонил Джошу на следующее утро. Я поставил все. Я выделил деньги из оставшихся сбережений и разделил их на три месяца (для неженатого парня, живущего в одиночестве и без детей одной тысячи долларов на месяц вполне достаточно). Время приниматься за работу, теперь я ученик на полном рабочем дне. Держу в уме: поиск в Google, Stackoverflow, IRC #RubyOnRails и сообщество Rails будут прикрывать меня, когда я застряну, уверен, что их будет достаточно.

Мои следующие три месяца - Миссия : получить MVP, получить достаточно, чтобы работать, но не “отстойно-достаточно”, чтобы оставить ужасное первое впечатление.

Недели 1 - 3

Это была, пожалуй, сложнейшая кривая обучения, но я НЕ сдавался.

Стены созданы для людей, которые, на самом деле, не хотят их покидать.

Установка рабочего окружения Rails для полного новичка может оказаться невероятно раздражающей. Подсказка #1: заимейте Mac. Подсказка #2: используйте Homebrew, RVM, Git и Heroku (на самом деле это все, что вам нужно, чтобы начать). Я потратил пару дней на установку, затем все удалил и снова установил. Достаточно повторить несколько раз, и вы привыкните к использованию командной строки терминала (консоли) и поймете, почему вещи работают так, как они работают. Затем, первая вещь, которой я занялся, были уроки TryRuby , Rails for Zombies и Rails Tutorial Майкла Хартла. Не беспокойтесь о том, чтобы на 120% понять материал, этого не случится, пока вы не начнете по-настоящему учиться. Я закончил Rails Tutorial и создал это похожее на Twitter приложение примерно за неделю, не совсем понимая, что я сделал. Позднее, по мере продвижения, я стал понимать, что все начинает обретать смысл.

Недели 3 - 6

С Twitter-приложением, созданным при помощи Rails Tutorial, я обрел некоторую уверенность. Руководство не сделало меня разработчиком, но теперь я знаю общие шаги в создании приложений, с создания самого приложения, и до установки его на Heroku. Все, что было между тем временем оставалось размытым. Как мне теперь ПО-НАСТОЯЩЕМУ начать учиться? Работая над реальным проектом, который что-то для меня значит . Джош и я решили, что мне стоит свободно поработать над Freelancify и посмотреть, что я смогу сделать. Первым, что я сделал, был перенос всего HTML с каркаса и организация его в файлы видов(views) и парциалов(partials). Я создал(scaffolded) шаблонные платформы для Пользователей(Users) и Проектов(Projects). Затем я начал изучать мой первый реальный гем Devise. Затем, возможность иметь отношения, например каждый Пользователь будет иметь портфолио. Но пользователи могут иметь множество портфолио, в то время как каждое портфолио может принадлежать лишь одному Пользователю. Когда вы поймете, как работают отношения между моделями и как вызывать/отображать вещи, которые принадлежат чему-то еще, жизнь станет намного проще. Если в какой-то части вы застряли и не можете сдвинуться с места, пропустите её, велика вероятность того, что пока вы разрабатываете другую возможность, вы так же поймете, как реализовать и то, что вы пропустили.

Недели 6 - 9

Шажок за шажком, я продолжал учиться, копируя и повторяя. Я мог заставлять какие-то вещи работать, а затем - бац - и я втыкался в стену и абсолютно не представлял, что же делать дальше. Заходя на Stackoverflow , IRC-чат #RubyOnRails, RailsCasts или дергая Джоша , в конце концов, я понимал, как действовать. Делайте то же самое снова и снова, и вы научитесь всему довольно быстро. Тратить раздражающие часы, тестируя чей-то ответ со Stackoverflow, чтобы понять, что он не работает - это, на самом деле, полезно. Вы понимаете, чего не следует делать. И когда вы найдете ответ, вы начнете понимать, ПОЧЕМУ последнее не работало. Примерно в это время я начал осознавать, насколько велика картина вещей, и по-настоящему понимать, ПОЧЕМУ все работает именно так, как работает. Я чувствовал себя идиотом, возвращался назад и рефакторил код, который написал ранее, делая его более эффективным. И в какой-то момент я достиг стадии, когда все начало становиться на свои места.

Недели 9 - 12

Я был в режиме невероятной энергичности, дорабатывая Freelancify до стадии запуска. На этой стадии я чувствовал себя так, словно лечу, претворяя функции в жизнь. Последняя неделя была потрачена на отладку различных багов и ляпов. В этот понедельник я запустил сайт. Но я по-прежнему далек от завершения обучения… Вот так. Я опустил (во имя краткости поста) мелкие детали и технические моменты. Тем не менее, не стесняйтесь задавать вопросы в комментариях, я определенно постараюсь ответить. Джеймс Фенд.

P.S. - Несмотря на то, что мне сильно помогла помощь наставника, с которым я мог встречаться, вы определенно можете изучить Rails и без него. Или же попробуйте найти себе такого человека, многие Rails-разработчики любят вносить свой вклад в сообщество. Поищите локальные конференции и встречи.

Этой записи уже более двух лет (опубликована 27 января 2012-го года), но она, тем не менее, не утратила своей актуальности. Джеймс Фенд за это время успел продать Freelancify и вложиться в новый стартап, запись об этом он оставил 27 февраля 2013. Я считаю, что эта статья - прекрасный пример того, как человек может идти к поставленной цели. Достаточно лишь начать. :)

Рассказать друзьям