Ruby on Rails 2.1 - Visualizações
Um Rails View é um programa ERb que compartilha dados com controladores por meio de variáveis mutuamente acessíveis.
Se você olhar no diretório app / views do aplicativo de biblioteca, verá um subdiretório para cada um dos controladores que criamos: book. Cada um desses subdiretórios foi criado automaticamente quando o controlador com o mesmo nome foi criado com o script de geração.
Agora, supondo que seu servidor da web esteja instalado e funcionando, forneça a seguinte entrada na caixa de endereço do seu navegador -
http://localhost:3000/book/list
Você obtém a seguinte mensagem de erro porque não definiu nenhum arquivo de visualização para nenhum método definido no controlador.
O Rails permite que você saiba que você precisa criar o arquivo de visualização para o novo método. Cada método que você definir no controlador precisa ter um arquivo RHTML correspondente, com o mesmo nome do método, para exibir os dados que o método está coletando.
Portanto, vamos criar arquivos de visualização para todos os métodos que definimos em book_controller.rb.
Criando Arquivo de Visualização para Método de Lista
Crie um arquivo chamado list.rhtml usando seu editor de texto favorito e salve-o em app / views / book. Depois de criar e salvar o arquivo, atualize seu navegador da web. Você deve ver uma página em branco; se não o fizer, verifique a ortografia do seu arquivo e certifique-se de que é exatamente igual ao método do seu controlador.
Agora, para exibir o conteúdo real, vamos colocar o seguinte código em list.rhtml.
<% if @books.blank? %>
<p>There are not any books currently in the system.</p>
<% else %>
<p>These are the current books in our system</p>
<ul id="books">
<% @books.each do |c| %>
<li><%= link_to c.title, {:action => 'show', :id => c.id} -%></li>
<% end %>
</ul>
<% end %>
<p><%= link_to "Add new Book", {:action => 'new' }%></p>
O código a ser executado é para verificar se o array @books contém algum objeto. o.blank?o método retorna verdadeiro se a matriz está vazia e falso se contém algum objeto. Este objeto @books foi criado no controlador dentro do método list.
O código entre as tags <% =%> é um link_tochamada de método. O primeiro parâmetro de link_to é o texto a ser exibido entre as tags <a>. O segundo parâmetro é o que a ação é chamada, quando o link é clicado. Nesse caso, é o método show. O parâmetro final é o id do livro que é passado através do objeto params
Agora, tente atualizar seu navegador e você deverá obter a tela a seguir, porque não temos nenhum livro em nossa biblioteca.
Criando arquivo de visualização para o novo método
Até agora, não temos nenhum livro em nossa biblioteca. Temos que criar alguns livros no sistema. Então, vamos projetar uma visão correspondente aonew método definido em book_controller.rb.
Crie um arquivo chamado new.rhtml usando seu editor de texto favorito e salve-o em app / views / book. Adicione o seguinte código ao arquivo new.rhtml.
<h1>Add new book</h1>
<% form_tag :action => 'create' do %>
<p><label for="book_title">Title
</label>:
<%= text_field 'book', 'title' %></p>
<p><label for="book_price">Price</label>:
<%= text_field 'book', 'price' %></p>
<p><label for="book_subject">Subject</label>:
<%= collection_select(:book,:subject_id,@subjects,:id,:name) %></p>
<p><label for="book_description">Description</label><br/>
<%= text_area 'book', 'description' %></p>
<%= submit_tag "Create" %>
<% end %>
<%= link_to 'Back', {:action => 'list'} %>
Aqui o start_form_tag()método interpreta o código Ruby em uma tag HTML <form> regular usando todas as informações fornecidas a ele. Esta tag, por exemplo, produz o seguinte HTML -
<form action="/book/create" method="post">
O próximo método é text_fieldque produz um campo de texto <input>. Os parâmetros para text_field são o nome do objeto e do campo. Nesse caso, o objeto é o livro e o nome é o título.
O método Rails chamado collection_selectcria um menu de seleção HTML construído a partir de um array, como @books. Existem cinco parâmetros, que são os seguintes -
:book- O objeto que você está manipulando. Nesse caso, é um objeto de livro.
:subject_id - O campo que é preenchido quando o livro é salvo.
@books - A matriz com a qual você está trabalhando.
:id- O valor armazenado no banco de dados. Em termos de HTML, este é o parâmetro de valor da tag <option>.
:name- A saída que o usuário vê no menu suspenso. Este é o valor entre as tags <option>.
O próximo usado é submit_tag, que produz um botão <input> que envia o formulário. Finalmente, existe oend_form_tag método que simplesmente se traduz em </form>.
Vá para o seu navegador e visite http: // localhost: 3000 / book / new. Isso lhe dará a seguinte tela.
Insira alguns dados neste formulário e clique no botão Criar. Isso resultará em uma chamada paracreate método, que não precisa de nenhuma visualização porque esse método está usando o list ou newmétodos para visualizar os resultados. Quando você clica no botão Criar , os dados devem ser enviados com sucesso e redirecioná-lo para a página da lista, na qual agora você tem um único item listado como segue -
Se você clicar no link, deverá ver outro erro “Falta o modelo”, pois ainda não criou o arquivo de modelo para o método show.
Criando arquivo de visualização para método show
Este método exibirá os detalhes completos sobre qualquer livro disponível na biblioteca. Crie um arquivo show.rhtml em app / views / book e preencha-o com o seguinte código -
<h1><%= @book.title %></h1>
<p>
<strong>Price: </strong> $<%= @book.price %><br />
<strong>Subject :</strong> <%= @book.subject.name %><br />
<strong>Created Date:</strong> <%= @book.created_at %><br />
</p>
<p><%= @book.description %></p>
<hr />
<%= link_to 'Back', {:action => 'list'} %>
Esta é a primeira vez que você aproveita todas as vantagens das associações, que permitem extrair facilmente dados de objetos relacionados.
O formato usado é @variable.relatedObject.column. Neste caso, você pode obter o valor do nome do assunto por meio da variável @book usando obelongs_toassociações. Se você clicar em qualquer registro listado, aparecerá a seguinte tela.
Criando arquivo de visualização para método de edição
Crie um novo arquivo chamado edit.rhtml e salve-o em app / views / book. Preencha-o com o seguinte código -
<h1>Edit Book Detail</h1>
<%= start_form_tag :action => 'update', :id => @book do %>
<p><label for="book_title">Title</label>:
<%= text_field 'book', 'title' %></p>
<p><label for="book_price">Price</label>:
<%= text_field 'book', 'price' %></p>
<p><label for="book_subject">Subject</label>:
<%= collection_select(:book, :subject_id,
@subjects, :id, :name) %></p>
<p><label for="book_description">Description</label><br/>
<%= text_area 'book', 'description' %></p>
<%= submit_tag "Save changes" %>
<% end %>
<%= link_to 'Back', {:action => 'list' } %>
Este código é muito semelhante ao new método, exceto pelo fato de que a ação a ser atualizada em vez de criar e definir um id.
Neste ponto, precisamos de algumas modificações no list method'svisualizar arquivo. Vá para o elemento <li> </li> e modifique-o para que tenha a seguinte aparência -
<li>
<%= link_to c.title, {:action => "show", :id => c.id} -%>
<b> <%= link_to 'Edit', {:action => "edit",
:id => c.id} %></b>
</li>
Agora, tente navegar pelos livros usando http: // localhost: 3000 / book / list. Ele lhe dará a lista de todos os livros junto comEditopção. Ao clicar na opção Editar, você terá a próxima tela da seguinte forma -
Agora, você edita essas informações e clica no botão Salvar alterações . Isso resultará em uma chamada paraupdatedisponível no arquivo do controlador e atualizará todos os atributos alterados. Observe que oupdate método não precisa de nenhum arquivo de visualização porque está usando show ou edit métodos para mostrar seus resultados.
Criação de arquivo de visualização para método de exclusão
Remover informações de um banco de dados usando Ruby on Rails é quase fácil demais. Você não precisa escrever nenhum código de visualização para o método delete, porque este método está usandolistmétodo para exibir o resultado. Então, vamos apenas modificar list.rhtml novamente e adicionar um link de exclusão.
Vá para o elemento <li> </li> e modifique-o para se parecer com o seguinte -
<li>
<%= link_to c.title, {:action => 'show', :id => c.id} -%>
<b> <%= link_to 'Edit', {:action => 'edit', :id => c.id} %></b>
<b> <%= link_to "Delete", {:action => 'delete', :id => c.id},
:confirm => "Are you sure you want to delete this item?" %></b>
</li>
o :confirmparâmetro apresenta uma caixa de confirmação de JavaScript perguntando se você realmente deseja executar a ação. Se o usuário clicar em OK, a ação prossegue e o item é excluído.
Agora, tente navegar nos livros usando http: // localhost: 3000 / book / list. Ele lhe dará a lista de todos os livros junto comEdit e Delete opções da seguinte forma -
Agora, usando o Delete opção, você pode excluir qualquer registro listado.
Criando arquivo de visualização para o método show_subjects
Crie um novo arquivo, show_subjects.rhtml, no diretório app / views / book e adicione o seguinte código a ele -
<h1><%= @subject.name -%></h1>
<ul>
<% @subject.books.each do |c| %>
<li><%= link_to c.title, :action => "show", :id => c.id -%></li>
<% end %>
</ul>
Você está aproveitando as associações ao iterar as várias listagens de livros de um único assunto.
Agora, modifique a linha Assunto de show.rhtml para que a lista de assuntos mostre um link.
<strong>Subject: </strong> <%= link_to @book.subject.name,
:action => "show_subjects", :id => @book.subject.id %><br />
Isso produzirá uma lista de assuntos na página de índice, para que os usuários possam acessá-los diretamente.
Modificar list.rhtml para adicionar o seguinte no topo do arquivo -
<ul id="subjects">
<% Subject.find(:all).each do |c| %>
<li><%= link_to c.name, :action => "show_subjects",
:id => c.id %></li>
<% end %>
</ul>
Agora, tente navegar pelos livros usando http: // localhost: 3000 / book / list. Ele exibirá todos os assuntos com links para que você possa navegar por todos os livros relacionados ao assunto.
O que vem a seguir?
Esperamos que agora você esteja confortável com todas as operações Rails.
O próximo capítulo explica como usar Layoutspara colocar seus dados de uma maneira melhor. Também mostraremos como usar CSS em seus aplicativos Rails.