O controlador de Rails é o centro lógico de sua aplicação. Ele coordena a interação entre o usuário, os pontos de vista, e do modelo. O controlador também é o lar de uma série de importantes serviços auxiliares.

É responsável pelo roteamento de pedidos externos para ações internas. Ele lida com as pessoas URLs amigáveis ​​extremamente bem.

Ele gerencia o cache, o que pode dar a aplicações aumenta ordens de grandeza de desempenho.

Ele gerencia os módulos auxiliares, que estendem as capacidades dos modelos de visão sem volume até o seu código.

Ele gerencia as sessões, dando aos usuários a impressão de uma interação permanente com os nossos pedidos.

O processo para a criação de um controlador é muito fácil, e é semelhante ao processo que já utilizado para a criação de um modelo. Nós vamos criar apenas um controlador aqui:

C:\ruby\library\> ruby script/generate controller Book
Observe que você está capitalizando Livro e usando a forma singular. Este é um paradigma Rails que você deve seguir sempre que criar um controlador.

Este comando realiza várias tarefas, dentre os quais são relevantes aqui:

Ele cria um arquivo chamado app / controllers / book_controller.rb
Se você vai ter olhada book_controller.rb, você vai encontrá-lo da seguinte forma:

class BookController < ApplicationController
end
Classes de controlador herdar ApplicationController, que é o outro arquivo na pasta de controladores:
application.rb.
ApplicationController contém código que pode ser executado em todos os seus controladores e ele herda Rails ActionController :: classe Base.

Você não precisa se ​​preocupar com o ApplicationController como ainda, por isso só vamos definir alguns stubs de método em book_controller.rb. Com base em sua exigência, você pode definir qualquer número de funções neste arquivo.

Modifique o arquivo para se parecer com o seguinte e salvar as alterações. Note-se que a sua até você o nome que você quiser dar a estes métodos, mas é melhor dar nomes relevantes.



class BookController < ApplicationController
def list
end
def show
end
def new
end
def create
end
def edit
end
def update
end
def delete
end
end
Agora vamos implementar todos os métodos, um por um.

Implementar o método de lista

O método de lista dá-lhe uma impressão de todos os livros no banco de dados. Esta funcionalidade será alcançado através das seguintes linhas de código.

def list
@books = Book.find(:all)
end
O @ books = Book.find (: all) linha no método lista diz Rails para pesquisar a tabela de livros e armazenar cada linha que ele encontra no objeto @ livros exemplo.

Implementação do método Show

O método mostra exibe apenas mais detalhes sobre um único livro. Esta funcionalidade será alcançado através das seguintes linhas de código.

def show
@book = Book.find(params[:id])
end
O método show do @books = Book.find (params [: id]) linha diz Rails para encontrar só o livro que tem o ID definido no params [: id].

O objeto params é um recipiente que permite que você passe valores entre chamadas de método. Por exemplo, quando você está na página chamada pelo método de lista, você pode clicar em um link para um livro específico, e passa o id do livro através do objeto params para que show pode encontrar o livro específico.

Aplicação do novo método

O novo método permite Rails saber que você vai criar um novo objeto. Então, basta adicionar o seguinte código neste método.

def new
@book = Book.new
@subjects = Subject.find(:all)
end
O método acima será chamado quando você vai exibir uma página para o usuário tomar a entrada do usuário. Aqui segunda linha agarra todas as disciplinas do banco de dados e coloca-los em um array chamado @subjects..

Implementação do método de criação

Depois de tomar a entrada do usuário usando o formulário HTML, o seu tempo para criar um registro no banco de dados. Para alcançar este objectivo, o método de criação de edição no book_controller.rb para coincidir com o seguinte:

def create
@book = Book.new(params[:book])
if @book.save
redirect_to :action => 'list'
else
@subjects = Subject.find(:all)
render :action => 'new'
end
end
A primeira linha cria uma variável de instância nova chamada @books que contém um objeto Livro construída a partir dos dados que o usuário apresentados. Os dados foram passados ​​do novo método de criar usando o objeto params.

A próxima linha é uma sentença condicional que redireciona o usuário para o método de lista se o objeto salva corretamente no banco de dados. Se não salvar, o usuário é enviado de volta para o novo método. O método é semelhante ao redirect_to realizando uma meta refresh em uma página web: ele automaticamente encaminha ao seu destino sem qualquer interação do usuário.

Then @subjects = Subject.find(:all)é necessária em caso de não salvar os dados com sucesso e torna-se caso semelhante como com nova opção.

Aplicação do método de edição

O método de edição parece quase idêntico ao método show. Ambos os métodos são usados ​​para recuperar um único objeto com base em sua ID e exibi-lo em uma página. A única diferença é que o método show não é editável.


def edit
@book = Book.find(params[:id])
@subjects = Subject.find(:all)
end
Este método será chamado para apresentar os dados na tela para ser modificado pelo usuário. A segunda linha agarra todas as disciplinas do banco de dados e coloca-los em um array chamado assuntos @.

Implementar o método de atualização

Este método será chamado após o método de edição quando o usuário modifica um dos dados e quer atualizar as alterações no banco de dados. O método de actualização é semelhante ao método de criação e irá ser utilizado para actualizar os livros existentes na base de dados.

def update
@book = Book.find(params[:id])
if @book.update_attributes(params[:book])
redirect_to :action => 'show', :id => @book
else
@subjects = Subject.find(:all)
render :action => 'edit'
end
end

O método update_attributes é semelhante ao método utilizado por criar save mas em vez de criar uma nova linha na base de dados, ele substitui os atributos da linha existente.

depois @subjects = Subject.find(:all)linha é necessária em caso de não salvar os dados com sucesso, então torna-se semelhante a editar opção.

Implementação do método de exclusão

Se você quiser excluir um registro no banco de dados, então você vai usar esse método. Implementar este método como se segue.

def delete
Book.find(params[:id]).destroy
redirect_to :action => 'list'
end
A primeira linha encontra o. Classificados de acordo com o parâmetro passado através do objeto params e exclui-la usando o método de destruir A segunda linha redireciona o usuário para o método de lista usando um redirect_to chamar.

Métodos adicionais para exibir Assuntos:

Suponha que você quer dar uma facilidade para seus usuários para acessar todos os livros baseados em um determinado assunto. Assim você pode criar um método dentro book_controller.rb para exibir todos os assuntos. Suponha nome do método é show_subjects:

def show_subjects
@subject = Subject.find(params[:id])
end

Finalmente o arquivo book_controller.rb será semelhante a seguinte:

class BookController < ApplicationController
def list
@books = Book.find(:all)
end
def show
@book = Book.find(params[:id])
end
def new
@book = Book.new
@subjects = Subject.find(:all)
end
def create
@book = Book.new(params[:book])
if @book.save
redirect_to :action => 'list'
else
@subjects = Subject.find(:all)
render :action => 'new'
end
end
def edit
@book = Book.find(params[:id])
@subjects = Subject.find(:all)
end
def update
@book = Book.find(params[:id])
if @book.update_attributes(params[:book])
redirect_to :action => 'show', :id => @book
else
@subjects = Subject.find(:all)
render :action => 'edit'
end
end
def delete
Book.find(params[:id]).destroy
redirect_to :action => 'list'
end
def show_subjects
@subject = Subject.find(params[:id])
end
end
Agora salve o arquivo controlador e sair para próxima missão.

Spoiler :