Post on 29-Jan-2023
transcript
Ruby
Ruby é uma linguagem de programação
● Multiparadigma
– (suporta mais de um paradigma de programação)● Tipagem dinâmica
– Não precisamos declarar tipos● Gerenciamento de memória automático
Tipos de Dados
Não existem "tipos primitivos" em Ruby; todos os tipos são classes:
Numeric é uma classe abstrata que representa números
● Integer
– Fixnum
– Bignum● Float
Tipos de Dados
● String pode ser delimitado por apóstrofes (') ou aspas ("). Ex: 'azul'
● Symbol é semelhante a string, mas dois símbolos iguais possuem o mesmo endereço de memória, é ótimo para se utilizar como índice num Hash. É definido com dois pontos (:). Ex: :nome
● Array são arrays dinâmicos, usados para representar matrizes e vetores. É delimitado por colchetes ([]) e cada valor é separado por vírgula. Ex: [4, 'azul', :termometro]
Tipos de Dados
● Hash é um vetor associativo é dinâmico. Delimitado por chaves ({}), onde o índice precede o valor com um sinal '=>'.
Ex: {:controller => 'user', :action => 'index'}.
● Regexp representa expressões regulares, delimitadas por //.
Rails
O nome rails faz referência justamente ao uso de faz referência justamente ao uso de convençõesconvenções, que correspondem aos “trilhos” seguidos pelo desenvolvedor no processo de desenvolvimento.
Fornecendo todos os pontos para o desenvolvimento de uma aplicação web.
Ruby on Rails● É um framework para desenvolvimento agil de
aplicações web
● Tem como base o padrão MVC
● Ótima escalabilidade
Ruby on Rails● DRY - Don't Repeat Yourself: foco no desenvolvimento da
modelagem e view, já que para o problemas classicos já descobriram uma solução.
● CoC - Convention over Configuration: seguir rigorosamente seus padrões, pois foi projetado para não gastarmos tempo configurando todo o ambiente do projeto.
O que é gem?● É uma biblioteca, um conjunto de arquivos Ruby reusáveis,
etiquetada com um nome e uma versão.
● Implementa funcionalidades não cria aplicações inteiras.
Entendendo o Framework
● Model
● Controller
● Views
● Routes
● Config/database.yml
● Gemfile
● Assets
Active Record
O Active Record é o M do MVC – modelo e responsável pela lógica de negocio da aplicação.
Ou seja, é o responsável pelo sistema de mapeamento de objeto relacionalmapeamento de objeto relacional, que facilita o uso de objetos de negócios cujos dados requer o armazenamento persistente com um banco de dados.
Resumindo
Fonte: http://intertwingly.net/slides/2005/imab/education.html
Instalar Rails windows
Para instalar Ruby e Ruby on Rails
Baixe railsInstaller em http://railsinstaller.org/pt-BR
Instale o railsInstaller.
Para instalar mysql
Baixe libmysql.dll e coloque na pasta C:\...\RailsInstaller\Ruby1.9.3\bin
Criando projeto no netbeans:
• Novo projeto, nova aplicação ruby on rails.
• Escolha o nome.
• Selecione o banco.
• Selecione a versão do framework.
Abra o terminal vá para a pasta do projeto e digite:rails s
rails generate scaffold post titulo:string conteudo:text
rails generate scaffold comentario autor:string conteudo:text post:references
class Post < ActiveRecord::Base has_many :comentarios end
class Comentario < ActiveRecord::Base belongs_to :post end
Alterar o arquivo config/route
Blog::Application.routes.draw do
resources :posts do
resources :comentarios
end
root 'posts#index'
<p class="notice"><%= notice %></p>
<p>
<b>Titulo:</b>
<%= @post.titulo %>
</p>
<p>
<b>Conteudo:</b>
<%= @post.conteudo %>
</p>
<h2>Comentarios</h2>
<% @post.comentarios.each do |comentario| %>
<p>
<b>Autor:</b>
<%= comentario.autor %>
</p>
<p>
<b>Comentario:</b>
<%= comentario.conteudo %>
</p>
<hr />
<% end %>
<h2>Adicione um comentario:</h2><%= form_for([@post, @post.comentarios.build]) do |f| %> <div class="field"> <%= f.label :autor %><br /> <%= f.text_field :autor %> </div> <div class="field"> <%= f.label :conteudo %><br /> <%= f.text_area :conteudo %> </div> <div class="actions"> <%= f.submit %> </div><% end %> <br /> <%= link_to 'Edit Post', edit_post_path(@post) %> |<%= link_to 'Back to Posts', posts_path %>
Troque o código da arquivo view/posts/show.html
Troque o create e destroy do controller comentario
def create
@post = Post.find(params[:post_id])
@comentario = @post.comentarios.create(comentario_params)
redirect_to post_path(@post)
end
def destroy
@post = Post.find(params[:post_id])
@comentario = @post.comentarios.find(params[:id]) @comentario.destroy
redirect_to post_path(@post)
end
Consultas
Select * from Post
Select * from Post where id=?
Commit - @post.save
INSERT INTO `posts`(`id`, `titulo`, `conteudo`, `created_at`, `updated_at`) VALUES ([value-1],[value-2],[value-3],[value-4],[value-5])
Vantagem do Raisl: facilidade na alteração do código quando ocorre uma alteração no banco.
Desvantagens: Programador não precisa entender a fundo o sql e perda de controle do código.
Criando uma aplicação● $ rails _3.2.13_ new $ rails _3.2.13_ new blogblog -d mysql -d mysql
● $ cd blog
● Add gem 'devise' gem 'devise' no Gemfile
● Add gem 'will_paginate' no Gemfile
● $ bundle install$ bundle install
● Configurar password e user no database.yml
● $ rake db:create
Criando uma aplicação● $ rails g devise:install
● $ rails generate devise User
● $ rails g scaffold post titulo:string texto:text user:references
● $ rake db:migrate
● $ rails generate devise:views
● $ rails g model comentario nome:string comentario:text post:references
●
Criando uma aplicação#posts_controller
before_filter :authenticate_user!
>protege as controllers (quando adicionados logo após a >protege as controllers (quando adicionados logo após a definição da classe que não são) púbilcasdefinição da classe que não são) púbilcas
Criando uma aplicação#homes_controller.rb
class HomesController < ApplicationController
def index
@posts=Post.order("created_at DESC").paginate(:page => params[:page], :per_page => 1)
respond_to do |format|
format.html # index.html.erb
format.json { render json: @posts }
end
end
end
Criando uma aplicação#Views/home/index.html.erb
<% @posts.each do |p| %>
<h1><%= p.titulo%></h1>
<p><%=simple_format(p.texto)%></p>
Autor: <%=p.user.name %>
<%end%>
<%= will_paginate @posts %>
#routes.rb
resources :homes
resources :posts
devise_for :users
root :to => "homes#index"