I – Introdução
- Neste post vamos mostrar os pontos mais importantes, comumente usados ao criarmos um app web usando o formato “mestre detalhe”
- Vamos criar uma aplicação web para controle de chamados (tickets), muito comum em ambientes como um Service Desk, que será o nome de nossa aplicação.
- Para cada ticket, existem várias tarefas associadas, que chamamos aqui de tasks.
- A continuação deste artigo está em Autenticação em Ruby On Rails 3.2.1 com Devise.
II – Principais tecnologias usadas neste artigo
- Linux Ubuntu 11.10
- Ruby 1.9.2
- Rails 3.2.1
III – O que não precisamos instalar
- Git, RVM, openssl, sqlite3 e outros pacotes necessários.
- Como dependemos de instalações e configurações anteriores, caso seu ambiente não esteja preparado, veja os posts:
- Para instalar a versão do Rails 3.2.1, siga o tutorial acima (item 1 e 2). Apenas informe a versão do Rails 3.2.1 no lugar das versões anteriores.
IV – Sequência de passos para criação
Passo 01 - Crie a aplicação
$ rails new service_desk $ cd service_desk
Passo 02 - Ajuste seu arquivo Gemfile
- Acrescente as linhas abaixo no arquivo Gemfile
gem 'execjs' # necessário para Linux gem 'therubyracer' # necessário para Linux
- em seguida…
$ bundle install
Passo 03 – Crie os models da aplicação e execute as migrations
$ rails g scaffold ticket ticket_number:string:uniq title:string $ rails g model task description:string ticket:belongs_to $ bundle exec rake db:migrate
Passo 04 – Ajuste os models Ticket e Task conforme estão a seguir
class Ticket
has_many :tasks
attr_accessible :ticket_number, :title, :tasks_attributes
validates :ticket_number, presence: true
accepts_nested_attributes_for :tasks, :reject_if => proc { |a| a[:description].blank? }, allow_destroy: true
end
class Task
belongs_to :ticket
attr_accessible :description
end
Passo 05 – Copie e cole o arquivo application.html.erb, que está a seguir
- app/views/layouts/application.html.erb
<!DOCTYPE html>
<html>
<head>
<title>Service Desk</title>
<%= stylesheet_link_tag "application" %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
</head>
<body>
<header>
<h1>Service Desk | Tickets Controller</h1>
</header>
<section id="main">
<%= yield %>
</section>
<footer>
<sub>Service Desk | Ticket Controller Web Application</sub>
</footer>
</body>
</html>
Passo 06 – Ajustes para mostrar as tarefas (Tasks)
- Em app/views/tickets/_form.html.erb, adicione o trecho abaixo, antes do botão submit:
<hr/>
<h2>Task</h2>
<table>
<tr><th>Task</th><th>destroy ?</th></tr>
<% @ticket.tasks.each do |tsk| %>
<%= f.fields_for :tasks, tsk do |tsk| %>
<%= render :partial => 'task', locals: {t: tsk} %>
<% end %>
<% end %>
</table>
<hr/>
- Crie um arquivo: app/views/tickets/_task.html.erb
- Copie e cole o seguinte conteúdo
<tr>
<td class="field">
<%= t.text_field :description %>
</td>
<td>
<%= t.check_box :_destroy %>
</td>
</tr>
Passo 07 – Ajustes para exibição de Ticket e Tasks
- Em app/views/tickets/show.html.erb
- Substitua o que estiver abaixo do campo title, pelo seguinte trecho de código
<hr/>
<h2>Task</h2>
<table>
<tr>
<th>Task
</th>
</tr>
<% @ticket.tasks.each do |tsk| %>
<tr>
<td class="field">
<%= tsk.description %>
</td>
</tr>
<% end %>
</table>
<hr/>
<%= link_to 'New Ticket', new_ticket_path %> |
<%= link_to 'Edit', edit_ticket_path(@ticket) %> |
<%= link_to 'View All', tickets_path %>
Passo 08 – Ajuste as actions New e Edit
- Em app/controllers/tickets_controller.rb
- Ajuste as actions New e Edit para que fiquem como a seguir
def new
@ticket = Ticket.new
@ticket.tasks.build
respond_to do |format|
format.html # new.html.erb
format.json { render json: @ticket }
end
end
def edit
@ticket = Ticket.find(params[:id])
@ticket.tasks.build
end
V – Executando a aplicação
- Para ver o resultado localmente.
$ rails s
- Carregue o browser, e digite na linha de endereços: http://localhost:3000/tickets
VI – Final Feliz
Pronto! Fizemos o básico para iniciarmos um novo projeto usando Ruby On Rails 3.2.1 no Linux Ubuntu 11.10. A aplicação funciona mantendo dois Models: Ticket e Tasks, num formulário tipo mestre-detalhe.
VII – Referências
(1) Instalação do Ruby On Rails 3.1.1 no Linux Ubuntu 11.10
(2) Ruby On Rails 3.1.3 no Linux Ubuntu 11.10: Iniciando um novo projeto – versão 2
Excelente tutorial. Perfeito para começarmos com o pé-direito!!!
Parabéns!
Só uma observação: durante a execução do tutorial o seguinte erro ocorreu comigo
“Can’t mass-assign protected attributes: tasks_attributes”
Isso foi resolvido adicionando “:tasks_attributes” na opção “attr_accessible” da classe Ticket, conforme exemplo a seguir:
class Ticket < ActiveRecord::Base
has_many :tasks
attr_accessible :ticket_number, :title, :tasks_attributes
……
Publicado por Duany Dreyton | 15/02/2013, 9:30 PMObrigado Dreyton!
Já fiz a correção que vc indicou.
Grato
Sergio Lima
Digital Area Blog
Publicado por Sergio | 18/02/2013, 10:22 AM