Создадим на своем локальном компьютере простой проект, который потом мы разместим на хостинге locum посредством Capistrano.
1. Убедимся, что у нас на локальном ПК используется версия Ruby 2.1.5:
$ rvm use 2.1.5
$ ruby -v
ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]
2. Проверим, какая версия rails используется:
$ rails -v
Rails 4.1.8
Если возникла ошибка, то вам нужно установить Ruby on Rails для выбранной в rvm версии ruby:
$ gem install rails
3. Создадим заготовку Rails-проекта и запустим сервер разработки:
$ rails new blog
$ cd blog
$ rails s
Перейдите в браузере по адресу: http://127.0.0.1:3000/ Там вы должны будете увидеть приветствие Welcome aboard.
4. Остановим сервер разработки и сгенерируем контроллер posts:
$ rails g controller posts index
При этом будет создан ряд файлов.
5. Сгенерируем модель Post:
$ rails g model Post title:string{100} text:text
Будут созданы:
$ rake db:migrate
7. Для активации CRUD для модели Post отредактируем файл config/routes.rb:
8. Запустим сервер разработки и перейдем на страницу отображения статей:
$ rails s
Перейдем по адресу: http://127.0.0.1:3000/.
Здесь должен отображаться список названий статей. Но у нас пока нет ни одной статьи, поэтому создадим форму для их добавления.
9. Форма добавления должна располагаться по адресу: http://localhost:3000/posts/new
При переходе мы получим ошибку: The action 'new' could not be found for PostsController.
Для ее устранения добавим экшен new в файл app/controllers/posts_controller.rb:
10. Если еще раз попробуем перейти по адресу из п.9, то получим ошибку об отсутствии шаблона: Missing template posts/new, application/new with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in: * "/home/yesnik/learn/rails_projects/blog/app/views"
Для ее устранения создадим файл app/views/posts/new.html.erb:
После этого при переходе по адресу из п.9 мы увидим форму добавления поста.
11. Если попытаться создать пост, мы получим ошибку:
The action 'create' could not be found for PostsController
Для ее устранения добавим экшен create в файл app/controllers/posts_controller.rb.
12. Однако добавив экшен и отправив форму, мы обнаружим еще одну ошибку: The action 'show' could not be found for PostsController. Для ее устранения нам понадобится в файл контроллера добавить метод show, а также создать шаблон для показа поста app/views/posts/show.html.erb:
13. Теперь после добавления поста происходит редирект на страницу его просмотра (show). Нажав ссылку "К списку постов", мы переходим на страницу, где должны показываться названия всех постов. Чтобы они отобразились, отредактируем экшен index в файле контроллера app/controllers/posts_controller.rb:
Также отредактируем шаблон app/views/posts/index.html.erb:
14. Если вы теперь перейдете по ссылке http://localhost:3000/posts , то увидите ссылки ред. и [Х] рядом с названием каждой статьи. Для того, чтобы они заработали, добавим экшены edit и destroy в контроллер app/controllers/posts_controller.rb:
Теперь при нажатии на [X] произойдет удаление поста.
15. Чтобы заработало редактирование содержимого поста, добавим шаблон app/views/posts/edit.html.erb:
Т.к. posts мы сделали ресурсом в config/routes.rb, то Rails сам определит нужный экшен.
16. Если отредактировать статью и сохранить, возникнет ошибка: The action 'update' could not be found for PostsController. Для ее устранения добавим экшен update в контроллер app/controllers/posts_controller.rb:
Поздравляем! Теперь у вас есть приложение на Ruby on Rails, в котором можно добавлять, редактировать и удалять посты.
1. Убедимся, что у нас на локальном ПК используется версия Ruby 2.1.5:
$ rvm use 2.1.5
$ ruby -v
ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]
2. Проверим, какая версия rails используется:
$ rails -v
Rails 4.1.8
Если возникла ошибка, то вам нужно установить Ruby on Rails для выбранной в rvm версии ruby:
$ gem install rails
3. Создадим заготовку Rails-проекта и запустим сервер разработки:
$ rails new blog
$ cd blog
$ rails s
Перейдите в браузере по адресу: http://127.0.0.1:3000/ Там вы должны будете увидеть приветствие Welcome aboard.
4. Остановим сервер разработки и сгенерируем контроллер posts:
$ rails g controller posts index
При этом будет создан ряд файлов.
5. Сгенерируем модель Post:
$ rails g model Post title:string{100} text:text
Будут созданы:
- модель app/models/post.rb
- файл миграции db/migrate/20141120101447_create_posts.rb
$ rake db:migrate
7. Для активации CRUD для модели Post отредактируем файл config/routes.rb:
Rails.application.routes.draw do root 'posts#index' resources :posts end
8. Запустим сервер разработки и перейдем на страницу отображения статей:
$ rails s
Перейдем по адресу: http://127.0.0.1:3000/.
Здесь должен отображаться список названий статей. Но у нас пока нет ни одной статьи, поэтому создадим форму для их добавления.
9. Форма добавления должна располагаться по адресу: http://localhost:3000/posts/new
При переходе мы получим ошибку: The action 'new' could not be found for PostsController.
Для ее устранения добавим экшен new в файл app/controllers/posts_controller.rb:
class PostsController < ApplicationController def index end def new @post = Post.new end end
10. Если еще раз попробуем перейти по адресу из п.9, то получим ошибку об отсутствии шаблона: Missing template posts/new, application/new with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in: * "/home/yesnik/learn/rails_projects/blog/app/views"
Для ее устранения создадим файл app/views/posts/new.html.erb:
<h3>Добавить новый пост</h3> <%= form_for :post, url: posts_path do |f| %> <p> <%= f.label :title, "Заголовок" %><br> <%= f.text_field :title %> </p> <p> <%= f.label :text, "Содержание" %><br> <%= f.text_area :text %> </p> <p> <%= f.submit "Создать" %> </p> <% end %>
После этого при переходе по адресу из п.9 мы увидим форму добавления поста.
11. Если попытаться создать пост, мы получим ошибку:
The action 'create' could not be found for PostsController
Для ее устранения добавим экшен create в файл app/controllers/posts_controller.rb.
class PostsController < ApplicationController def index end def new @post = Post.new end def create @post = Post.new(post_params) @post.save # После сохранения делаем редирект на новую статью redirect_to @post end def show @post = Post.find(params[:id]) end private def post_params params.require(:post).permit(:title, :text) end end
12. Однако добавив экшен и отправив форму, мы обнаружим еще одну ошибку: The action 'show' could not be found for PostsController. Для ее устранения нам понадобится в файл контроллера добавить метод show, а также создать шаблон для показа поста app/views/posts/show.html.erb:
<p><%= link_to "К списку постов", posts_path %></p> <h3><%= @post.title %></h3> <p><%= @post.text %></p>
13. Теперь после добавления поста происходит редирект на страницу его просмотра (show). Нажав ссылку "К списку постов", мы переходим на страницу, где должны показываться названия всех постов. Чтобы они отобразились, отредактируем экшен index в файле контроллера app/controllers/posts_controller.rb:
class PostsController < ApplicationController def index @posts = Post.all end # ... end
Также отредактируем шаблон app/views/posts/index.html.erb:
<h3>Список постов</h3> <ul> <% @posts.each do |post| %> <li> <%= link_to post.title, post_path(post) %> <small>от <%= post.created_at.strftime "%d.%m.%Y в %H:%M" %></small> <%= link_to "ред.", edit_post_path(post) %> <%= link_to "[X]", post_path(post), method: :delete, data: {confirm: "Точно удалить пост?"} %> </li> <% end %> </ul> <%= link_to "Добавить пост", new_post_path %>
14. Если вы теперь перейдете по ссылке http://localhost:3000/posts , то увидите ссылки ред. и [Х] рядом с названием каждой статьи. Для того, чтобы они заработали, добавим экшены edit и destroy в контроллер app/controllers/posts_controller.rb:
class PostsController < ApplicationController def edit @post = Post.find(params[:id]) end def destroy @post = Post.find(params[:id]) @post.destroy # После удаления поста редирект на список постов redirect_to posts_path end # ... end
Теперь при нажатии на [X] произойдет удаление поста.
15. Чтобы заработало редактирование содержимого поста, добавим шаблон app/views/posts/edit.html.erb:
<h3>Редактирование поста</h3> <%= form_for @post do |f| %> <p> <%= f.label :title, "Заголовок" %><br> <%= f.text_field :title %> </p> <p> <%= f.label :text, "Содержание" %><br> <%= f.text_area :text %> </p> <p> <%= f.submit "Сохранить" %> </p> <% end %>
Т.к. posts мы сделали ресурсом в config/routes.rb, то Rails сам определит нужный экшен.
16. Если отредактировать статью и сохранить, возникнет ошибка: The action 'update' could not be found for PostsController. Для ее устранения добавим экшен update в контроллер app/controllers/posts_controller.rb:
class PostsController < ApplicationController def update @post = Post.find(params[:id]) if @post.update(post_params) redirect_to @post else render 'edit' end end # ... end
Поздравляем! Теперь у вас есть приложение на Ruby on Rails, в котором можно добавлять, редактировать и удалять посты.
Комментариев нет:
Отправить комментарий