Skip to content

Latest commit

 

History

History
232 lines (173 loc) · 6.44 KB

05.md

File metadata and controls

232 lines (173 loc) · 6.44 KB

Logo do Curso

<< Voltar

Material da aula 05

Temas:

  • Criação de uma aplicação do zero: loja virtual de filmes;
    • Repositório git;
      • Uso de gemsets;
      • Criação dos modelos;
      • Seeds a partir de dados em CSV;
      • Adição da gem 'bootstrap';
      • Criação da página inicial;
      • Divisão do conteúdo em partials;
      • Implementação de uma busca simples.

Repositório git com a Aplicação Movie-Store: https://github.com/alexkutzke/movie-store-cursoror

Passo a passo

Configuração do ambiente para o uso do git.

  $ git config --global user.name  "Alex Kutzke"
  $ git config --global user.email "[email protected]"

Criação da Aplicação Movie Store.

  $ cd /vagrant
  $ rails new movie_store
  $ cd movie_store

Criação e indicação de uma Gemset para a aplicação.

  $ cat > .ruby-version
	# digitar 2.3.3
	# pressionar <enter>
	# pressionar ctrl+d
  $ cat > .ruby-gemset
	# digitar movie_store
	# pressionar <enter>
	# pressionar ctrl+d
  $ cd ..
  $ cd movie_store
  $ gem install blundle
  $ bundle install

Nesse momento, cria-se o novo repositório no github.

	# na pasta da aplicação
	$ git init
	# Edit README.md
	$ git add .
	$ git commit -am "Initial commit"
	$ git remote add origin https://github.com/PATH_PARA_O_SEU_REPO.git
	$ git push origin master

Com o repositório pronto, podemos começar as alterações na aplicação.

Lembre-se de descomentar a linha 22 do arquivo Gemfile para que a gem 'therubyracer' seja instalada. Além disso, se estiver utilizando o vagrant altere o arquivo config/environments/development.rb na linha 8, adicionando o seguinte:

  # Edit config/environments/development.rb:8
  config.reload_classes_only_on_change = false
	# Instalar a gem.
	$ bundle Install

Os primeiros modelos a serem criados serão chamados de Movies, Actors e Directors.

	# Cria modelo para filmes
	$ rails g model movie title:string year:integer runtime:string genre:string plot:text language:string country:string awards:string poster_url:string imdb_id:string imdb_rating:string
	$ rails db:migrate

	# cria modelos para autores e diretores
	$ rails g model actor name:string
	$ rails g model director name:string

Nesse momento, é necessário adicionar um relacionamento "muitos para muitos" nos modelos recém criados. Para isso, adicione o seguinte no arquivo 'app/models/movie.rb'

	has_and_belongs_to_many :actors
	has_and_belongs_to_many :directors

E nos arquivos 'app/models/{actors.rb,director.rb}' adicione:

	has_and_belongs_to_many :movies

Como o relacionamento criado é de "muitos para muitos", precisamos criar as Join tables para que a associação funcione.

	# Cria migrations para join tables
	$ rails g migration CreateJoinTableMovieActor movie actor
	$ rails g migration CreateJoinTableMovieDirector movie director
	$ rails db:migrate

Faça testes com o rails console para verificar se os modelos estão funcionando corretamente.

Se está tudo ok, agora devemos adicionar o suporte ao Bootstrap para nossa aplicação. Para isso, utilizaremos a gem 'bootstrap'. Portanto, adicione o seguinte código ao final do arquivo 'Gemfile.rb'.

	# Gem bootstrap
	gem 'bootstrap'
	source 'https://rails-assets.org' do
	  gem 'rails-assets-tether', '>= 1.3.3'
	end
	$ bundle install

Para concluir a instalação do bootstrap, siga os passos de instalação da página da gem: https://github.com/twbs/bootstrap-rubygem

Agora, podemos iniciar o processo de criação do seeds.rb. Para esse seeds, utilizaremos uma base de dados de filmes pré-existente em um arquivo CSV. Portanto, baixe o arquivo abaixo e salve no (novo) diretório 'db/seeds_data' da sua aplicação:

http://cursorails.kutzke.com.br/movies.csv

Se quiser utilizar o terminal para isso, faça:

	$ cd db
	$ mkdir seeds_data
	$ wget http://cursorails.kutzke.com.br/movies.csv

Para adicionar conteúdo ao 'db/seeds.rb' você pode copiar e colar do repositório da aplicação no meu github: https://github.com/alexkutzke/movie-store-cursoror/blob/master/db/seeds.rb

Agora basta executar o seeds:

	$ rails db:seed

Novamente, execute testes com o rails console para verificar que o conteúdo da base de dados foi criado corretamente.

Agora podemos criar os scaffolds para filmes:

	$ rails g scaffold movie title:string year:integer runtime:string genre:string plot:text language:string country:string awards:string poster_url:string imdb_id:string imdb_rating:string --skip-stylesheets

Note a opção para pular a criação dos estilos CSS para o scaffold. Fazemos isso para que as regras criadas não entrem em conflito com o bootstrap.

Adicionamos, agora, um controller para a página principal:

	$ rails g controller store index

Adicione a opção "root 'store#index" ao routes.rb.

Agora, se desejar agilizar seu trabalho, copie os arquivos 'app/views/layouts/application.html.erb' e 'app/views/store/index.html.erb' do meu repositório git.

https://github.com/alexkutzke/movie-store-cursoror/blob/master/app/views/layouts/application.html.erb https://github.com/alexkutzke/movie-store-cursoror/blob/master/app/views/store/index.html.erb

Para que as viws acima funcionem, é necessário adicionar as seguintes partials:

Se desejar, copie os arquivos do meu repositório git.

Lembre-se de adicionar conteúdo necessário no controllador 'store#index'. Esse conteúdo deve carregar uma lista de filmes em @movies.

Adicione, também, o método 'to_s' aos Models Actor e Director, para que a exibição fique correta.

	def to_s
		self.name
	end

Para implementar a busca, precisamos, em primeiro lugar, adicionar uma nova rota ao resource movies.

	resources :movies do
		collection do
			get 'search'
		end
	end

Atenção ao formulário de busca já existente em 'app/views/layouts/application.html.erb'. Consegue utilizá-lo para realizar a busca? Para auxiliá-lo nesse processo, utilize o método where do ActiveRecord.